7 Commits

Author SHA1 Message Date
Celes Renata c3b892a5c8 fix: update foot.ini template - add SpaceMono font, fix deprecated options 2026-05-08 17:00:30 -07:00
Celes Renata d765a33efd fix: rename remaining swww references to awww 2026-05-08 16:38:28 -07:00
Celes Renata f15eae1dd2 fix: rename swww to awww 2026-05-08 16:36:20 -07:00
Celes Renata d70da9b5f0 fix: add --source-color-index 0 to matugen for non-interactive use 2026-05-08 16:30:16 -07:00
Celes Renata 4eec40e0bb fix: add wayland lib to LIBRARY_PATH for pywayland linking 2026-05-08 16:04:57 -07:00
Celes Renata 4a772837f9 fix: escape bash variable in Nix string interpolation 2026-05-08 15:56:46 -07:00
Celes Renata f143bce273 fix: add wayland dev headers and scanner for pywayland build on NixOS 2026-05-08 15:55:01 -07:00
15 changed files with 119 additions and 83 deletions
+4 -3
View File
@@ -1,4 +1,5 @@
[main]
font=SpaceMono Nerd Font:size=11
term=xterm-256color
login-shell=yes
app-id=foot
@@ -27,7 +28,7 @@ uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.
[cursor]
style=beam
color=@CURSOR_COLOR@
#color=@CURSOR_COLOR@
blink=no
beam-thickness=1.5
underline-thickness=<font-metrics>
@@ -36,7 +37,7 @@ underline-thickness=<font-metrics>
hide-when-typing=no
alternate-scroll-mode=yes
[colors]
[colors-dark]
alpha=0.95
background=@BACKGROUND_COLOR@
foreground=@FOREGROUND_COLOR@
@@ -83,7 +84,7 @@ scrollback-down-page=Shift+Page_Down
scrollback-down-half-page=none
scrollback-down-line=none
clipboard-copy=Control+Shift+c XF86Copy
clipboard-paste=Control+Shift+v XF86Paste
clipboard-paste=Control+v Control+Shift+v XF86Paste
primary-paste=Shift+Insert
search-start=Control+Shift+r
font-increase=Control+plus Control+equal Control+KP_Add
@@ -0,0 +1,4 @@
22 serialization::archive 19 0 0 0 0 2 1 2
0 0 2 0 132 /volume1/Backups/esnixi-20260422-004335/home/sources/celesrenata/end-4-flakes/configs/quickshell/assets/images/default_wallpaper.png 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 1970-01-01 00:00:00 19 2026-04-22 00:44:11 19 2025-08-08 22:16:58 0.000000000e+00 0 0 0 0 0 0 0 1920 1080 67685 0 0 0 0 0 0 0 0 0 0 0 3 png 1 0 0 0 0 6 1 1
1 0 0 -99 0 0 0 0 0 10 1 1
2 0 0 0 0 0 0 0.000000000e+00 0.000000000e+00 0.000000000e+00 0.000000000e+00
@@ -0,0 +1,4 @@
22 serialization::archive 19 0 0 0 0 2 1 2
0 0 2 0 135 /volume1/Backups/esnixi-20260422-004335/home/sources/celesrenata/end-4-flakes/configs/quickshell/ii/assets/images/default_wallpaper.png 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 1970-01-01 00:00:00 19 2026-04-22 00:44:11 19 2025-08-08 22:16:58 0.000000000e+00 0 0 0 0 0 0 0 1920 1080 67685 0 0 0 0 0 0 0 0 0 0 0 3 png 1 0 0 0 0 6 1 1
1 0 0 -99 0 0 0 0 0 10 1 1
2 0 0 0 0 0 0 0.000000000e+00 0.000000000e+00 0.000000000e+00 0.000000000e+00
@@ -98,14 +98,14 @@ Singleton {
// Prevent sudden bangs
property bool enable: true
property real maxAllowedIncrease: 10
property real maxAllowed: 90 // Realistically should already provide some protection when it's 99...
property real maxAllowed: 200
}
}
property JsonObject apps: JsonObject {
property string bluetooth: "kcmshell6 kcm_bluetooth"
property string network: "plasmawindowed org.kde.plasma.networkmanagement"
property string networkEthernet: "kcmshell6 kcm_networkmanagement"
property string bluetooth: "kcmshell6-bluetooth"
property string network: "plasmawindowed-network"
property string networkEthernet: "kcmshell6-network"
property string taskManager: "plasma-systemmonitor --page-name Processes"
property string terminal: "kitty -1" // This is only for shell actions
}
@@ -3,11 +3,18 @@
# Log execution
LOG="/tmp/switchwall.log"
echo "[$(date)] switchwall.sh started" >> "$LOG"
# Set default venv path if not already set
ILLOGICAL_IMPULSE_VIRTUAL_ENV="${ILLOGICAL_IMPULSE_VIRTUAL_ENV:-$HOME/.local/state/quickshell/.venv}"
echo "ILLOGICAL_IMPULSE_VIRTUAL_ENV=$ILLOGICAL_IMPULSE_VIRTUAL_ENV" >> "$LOG"
# Ensure LD_LIBRARY_PATH is set for Python venv
if [ -z "$LD_LIBRARY_PATH" ]; then
export LD_LIBRARY_PATH="/run/current-system/sw/lib"
# Ensure LD_LIBRARY_PATH includes libstdc++ for Python native modules
if [ -z "$LD_LIBRARY_PATH" ] || ! echo "$LD_LIBRARY_PATH" | grep -q "nix-ld"; then
NIX_LD_LIBS="/run/current-system/sw/share/nix-ld/lib"
if [ -d "$NIX_LD_LIBS" ]; then
export LD_LIBRARY_PATH="${NIX_LD_LIBS}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
else
export LD_LIBRARY_PATH="/run/current-system/sw/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
fi
echo "Set LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> "$LOG"
fi
@@ -168,6 +175,10 @@ set_wallpaper_path() {
if [ -f "$SHELL_CONFIG_FILE" ]; then
jq --arg path "$path" '.background.wallpaperPath = $path' "$SHELL_CONFIG_FILE" > "$SHELL_CONFIG_FILE.tmp" && mv "$SHELL_CONFIG_FILE.tmp" "$SHELL_CONFIG_FILE"
fi
# Apply wallpaper with awww
if [ -f "$path" ]; then
awww img "$path" 2>/dev/null
fi
}
set_thumbnail_path() {
@@ -295,7 +306,7 @@ switch() {
fi
fi
matugen "${matugen_args[@]}"
matugen --source-color-index 0 "${matugen_args[@]}"
echo "[$(date)] Running python script" >> "$LOG"
"$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/python3" "$SCRIPT_DIR/generate_colors_material.py" "${generate_colors_material_args[@]}" \
> "$STATE_DIR"/user/generated/material_colors.scss 2>> "$LOG"
@@ -413,7 +424,7 @@ main() {
# Only prompt for wallpaper if not using --color and not using --noswitch and no imgpath set
if [[ -z "$imgpath" && -z "$color_flag" && -z "$noswitch_flag" ]]; then
# Try to pick a random wallpaper from Wallpapers directory
WALLPAPER_DIR="$(xdg-user-dir PICTURES)/Wallpapers"
WALLPAPER_DIR="$(xdg-user-dir PICTURES)/Backgrounds"
if [[ -d "$WALLPAPER_DIR" ]] && [[ -z "$choose_flag" ]]; then
imgpath=$(find "$WALLPAPER_DIR" -type f \( -name "*.jpg" -o -name "*.png" \) 2>/dev/null | shuf -n 1)
fi
+3 -3
View File
@@ -103,9 +103,9 @@ Singleton {
}
property JsonObject apps: JsonObject {
property string bluetooth: "kcmshell6 kcm_bluetooth"
property string network: "plasmawindowed org.kde.plasma.networkmanagement"
property string networkEthernet: "kcmshell6 kcm_networkmanagement"
property string bluetooth: "kcmshell6-bluetooth"
property string network: "plasmawindowed-network"
property string networkEthernet: "kcmshell6-network"
property string taskManager: "plasma-systemmonitor --page-name Processes"
property string terminal: "kitty -1" // This is only for shell actions
}
@@ -36,8 +36,17 @@ colorstrings=''
colorlist=()
colorvalues=()
colornames=$(cat $STATE_DIR/user/generated/material_colors.scss | cut -d: -f1)
colorstrings=$(cat $STATE_DIR/user/generated/material_colors.scss | cut -d: -f2 | cut -d ' ' -f2 | cut -d ";" -f1)
SCSS_FILE="$STATE_DIR/user/generated/material_colors.scss"
JSON_FILE="$STATE_DIR/user/generated/colors.json"
if [ -s "$SCSS_FILE" ]; then
colornames=$(cut -d: -f1 "$SCSS_FILE")
colorstrings=$(cut -d: -f2 "$SCSS_FILE" | cut -d ' ' -f2 | cut -d ";" -f1)
elif [ -s "$JSON_FILE" ]; then
# Fallback: read from colors.json when scss generation failed
colornames=$(jq -r 'to_entries[] | "$\(.key)"' "$JSON_FILE")
colorstrings=$(jq -r 'to_entries[] | .value' "$JSON_FILE")
fi
IFS=$'\n'
colorlist=($colornames) # Array of color names
colorvalues=($colorstrings) # Array of color values
+4 -4
View File
@@ -117,10 +117,10 @@ EOF
echo "✅ Quickshell colors generated"
fi
# Update wallpaper if using swww
if command -v swww >/dev/null 2>&1; then
echo "Updating wallpaper with swww..."
swww img "$WALLPAPER" --transition-type fade --transition-duration 1
# Update wallpaper if using awww
if command -v awww >/dev/null 2>&1; then
echo "Updating wallpaper with awww..."
awww img "$WALLPAPER" --transition-type fade --transition-duration 1
fi
echo "🎨 Color generation complete!"
Generated
+9 -31
View File
@@ -7,11 +7,11 @@
]
},
"locked": {
"lastModified": 1765480374,
"narHash": "sha256-HlbvQAqLx7WqZFFQZ8nu5UUJAVlXiV/kqKbyueA8srw=",
"lastModified": 1772380461,
"narHash": "sha256-O3ukj3Bb3V0Tiy/4LUfLlBpWypJ9P0JeUgsKl2nmZZY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "39cb677ed9e908e90478aa9fe5f3383dfc1a63f3",
"rev": "f140aa04d7d14f8a50ab27f3691b5766b17ae961",
"type": "github"
},
"original": {
@@ -22,45 +22,23 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1765186076,
"narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
"owner": "NixOS",
"lastModified": 1733940491,
"narHash": "sha256-X+N3DpXiFWAXkPge3LBVsk5SHUmLYkR//8uf37oOJ3Y=",
"owner": "nvmd",
"repo": "nixpkgs",
"rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
"rev": "431e58c722adba169c982afcfbe134edc271daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"owner": "nvmd",
"repo": "nixpkgs",
"type": "github"
}
},
"quickshell": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1764663772,
"narHash": "sha256-sHqLmm0wAt3PC4vczJeBozI1/f4rv9yp3IjkClHDXDs=",
"owner": "outfoxxed",
"repo": "quickshell",
"rev": "26531fc46ef17e9365b03770edd3fb9206fcb460",
"type": "github"
},
"original": {
"owner": "outfoxxed",
"repo": "quickshell",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"quickshell": "quickshell"
"nixpkgs": "nixpkgs"
}
}
},
+36 -8
View File
@@ -2,18 +2,14 @@
description = "NixOS adaptation of end-4's dots-hyprland - self-contained installer replication";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs.url = "github:nvmd/nixpkgs";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
quickshell = {
url = "github:outfoxxed/quickshell";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, quickshell, ... }:
outputs = { self, nixpkgs, home-manager, ... }:
let
systems = [ "x86_64-linux" "aarch64-linux" ];
forAllSystems = nixpkgs.lib.genAttrs systems;
@@ -25,8 +21,40 @@
in
{
overlays.default = final: prev: {
# No quickshell override needed - nixpkgs 25.11+ provides it
# Environment setup is handled by the quickshell-startup script
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:
@@ -196,6 +196,7 @@ in
TimeoutStopSec = 10;
# Environment variables - include full user environment
PassEnvironment = [ "HYPRLAND_INSTANCE_SIGNATURE" "WAYLAND_DISPLAY" ];
Environment = [
"QT_SCALE_FACTOR=${toString cfg.scaling}"
"QT_QUICK_CONTROLS_STYLE=Basic"
+3 -6
View File
@@ -76,12 +76,12 @@ in
configDirs = lib.optionals cfg.applications.kitty.enable [ "kitty" ] ++
lib.optionals cfg.applications.foot.enable [ "foot" ] ++
lib.optionals cfg.applications.fuzzel.enable [ "fuzzel" ] ++
[ "wlogout" "matugen" ]; # Always enabled applications
[ "wlogout" ]; # Always enabled applications
configFiles = listToAttrs (map (dir: {
name = dir;
value = {
source = "${cfg.source}/${dir}";
source = "${cfg.source}/.config/${dir}";
recursive = true;
};
}) configDirs);
@@ -140,10 +140,7 @@ in
recursive = true;
};
".local/share/konsole" = mkIf cfg.copyMiscConfig {
source = "${cfg.source}/.local/share/konsole";
recursive = true;
};
# konsole removed - managed by kde-material-you-colors
};
# Ensure XDG directories exist (installer creates these)
+7 -5
View File
@@ -202,11 +202,6 @@ in
$DRY_RUN_CMD mv "$HOME/.config/fish" "$HOME/.config/fish.backup-$(date +%Y%m%d-%H%M%S)"
$DRY_RUN_CMD echo " Backed up existing fish config directory"
fi
if [[ -d "$HOME/.config/matugen" && ! -L "$HOME/.config/matugen" ]]; then
$DRY_RUN_CMD mv "$HOME/.config/matugen" "$HOME/.config/matugen.backup-$(date +%Y%m%d-%H%M%S)"
$DRY_RUN_CMD echo " Backed up existing matugen config directory"
fi
'';
# Copy quickshell config after link generation
@@ -220,6 +215,13 @@ in
$DRY_RUN_CMD echo " Quickshell configuration copied successfully"
else
$DRY_RUN_CMD echo " Quickshell configuration already exists"
# Always update critical scripts that need environment fixes
# Use the flake's own configs directory, not the GitHub source
if [ -f "${./../configs}/quickshell/ii/scripts/colors/switchwall.sh" ]; then
cp "${./../configs}/quickshell/ii/scripts/colors/switchwall.sh" "$HOME/.config/quickshell/ii/scripts/colors/switchwall.sh"
chmod +x "$HOME/.config/quickshell/ii/scripts/colors/switchwall.sh"
$DRY_RUN_CMD echo " Updated switchwall.sh script"
fi
fi
# Ensure quickshell uses the proper environment variables
+7 -10
View File
@@ -62,8 +62,11 @@ let
export CXX="${pkgs.gcc}/bin/g++"
# Set wayland protocol path for pywayland
export PKG_CONFIG_PATH="${pkgs.wayland}/lib/pkgconfig:${pkgs.wayland-protocols}/share/pkgconfig"
export WAYLAND_PROTOCOLS_DIR="${pkgs.wayland}/share/wayland"
export PKG_CONFIG_PATH="${pkgs.wayland.dev}/lib/pkgconfig:${pkgs.wayland-protocols}/share/pkgconfig:${pkgs.wayland-scanner.dev}/lib/pkgconfig"
export WAYLAND_PROTOCOLS_DIR="${pkgs.wayland-scanner}/share/wayland"
export C_INCLUDE_PATH="${pkgs.wayland.dev}/include:$C_INCLUDE_PATH"
export LIBRARY_PATH="${pkgs.wayland}/lib:$LIBRARY_PATH"
export PATH="${pkgs.wayland-scanner}/bin:$PATH"
# Upgrade pip first
pip install --upgrade pip
@@ -84,14 +87,8 @@ let
setproctitle==1.3.4 \
setuptools==80.9.0 \
setuptools-scm==8.1.0 \
wheel==0.45.1
# Install pywayland separately with custom protocol path
pip install --no-cache-dir --force-reinstall \
--global-option=build_ext \
--global-option="--wayland-scanner=${pkgs.wayland-scanner}/bin/wayland-scanner" \
--global-option="--wayland-protocols=${pkgs.wayland}/share/wayland" \
pywayland==0.4.18 || echo " pywayland install failed, continuing..."
wheel==0.45.1 \
pywayland==0.4.18
# Test critical imports
echo "🧪 Testing critical package imports..."
+6 -2
View File
@@ -32,7 +32,7 @@ let
hyprlock
hyprpicker
networkmanagerapplet # nm-connection-editor
# pkgs.quickshell - Add to home.packages from nixpkgs-unstable instead
pkgs.quickshell
translate-shell
wlogout
@@ -66,6 +66,10 @@ let
export QML2_IMPORT_PATH="${pkgs.kdePackages.plasma-nm}/lib/qt-6/qml:${pkgs.kdePackages.kconfig}/lib/qt-6/qml:${pkgs.kdePackages.kirigami}/lib/qt-6/qml:${pkgs.kdePackages.networkmanager-qt}/lib/qt-6/qml:${pkgs.kdePackages.modemmanager-qt}/lib/qt-6/qml:${pkgs.kdePackages.kcoreaddons}/lib/qt-6/qml:${pkgs.kdePackages.ki18n}/lib/qt-6/qml"
exec ${pkgs.kdePackages.kcmutils}/bin/kcmshell6 kcm_networkmanagement
'')
(pkgs.writeShellScriptBin "plasmawindowed-network" ''
export QML2_IMPORT_PATH="${pkgs.kdePackages.plasma-nm}/lib/qt-6/qml:${pkgs.kdePackages.kconfig}/lib/qt-6/qml:${pkgs.kdePackages.kirigami}/lib/qt-6/qml:${pkgs.kdePackages.networkmanager-qt}/lib/qt-6/qml:${pkgs.kdePackages.modemmanager-qt}/lib/qt-6/qml:${pkgs.kdePackages.kcoreaddons}/lib/qt-6/qml:${pkgs.kdePackages.ki18n}/lib/qt-6/qml"
exec ${pkgs.kdePackages.kde-cli-tools}/bin/plasmawindowed org.kde.plasma.networkmanagement
'')
];
# illogical-impulse-hyprland PKGBUILD
@@ -125,7 +129,7 @@ let
# Note: might need to add custom font derivation
noto-fonts
noto-fonts-cjk-sans
noto-fonts-emoji
noto-fonts-color-emoji
font-awesome
material-design-icons
nerd-fonts.jetbrains-mono