Compare commits

...
2 Commits
8 changed files with 123 additions and 32 deletions

No files matched your search

-3
View File
@@ -25,9 +25,6 @@
]; ];
programs.gamemode.enable = true; programs.gamemode.enable = true;
programs.kdeconnect.enable = true;
home-manager.users.sweetbread.services.kdeconnect.enable = true;
services.printing.enable = true; services.printing.enable = true;
hardware.opentabletdriver.enable = true; hardware.opentabletdriver.enable = true;
@@ -1,6 +1,7 @@
{ config, lib, osConfig, pkgs, ... }: { config, lib, osConfig, pkgs, ... }:
let let
host = osConfig.networking.hostName; host = osConfig.networking.hostName;
isChest = config.home.username == "chest";
isRias = host == "Rias"; isRias = host == "Rias";
liveDecoder = if builtins.elem osConfig.networking.hostName [ "Rias" "Eclipse" ] then "cuda" else "vaapi"; liveDecoder = if builtins.elem osConfig.networking.hostName [ "Rias" "Eclipse" ] then "cuda" else "vaapi";
source = pkgs.applyPatches { source = pkgs.applyPatches {
@@ -15,7 +16,8 @@ let
]; ];
nonConeMode = true; nonConeMode = true;
}; };
patches = [ (pkgs.writeText "lucid-scratchpad-target.patch" '' patches = [
(pkgs.writeText "lucid-scratchpad-target.patch" ''
diff --git a/support/hypr/modules/specials.lua b/support/hypr/modules/specials.lua diff --git a/support/hypr/modules/specials.lua b/support/hypr/modules/specials.lua
--- a/support/hypr/modules/specials.lua --- a/support/hypr/modules/specials.lua
+++ b/support/hypr/modules/specials.lua +++ b/support/hypr/modules/specials.lua
@@ -34,15 +36,40 @@ let
+ end + end
end end
end end
'') ]; '')
(pkgs.writeText "lucid-lair-search.patch" ''
--- a/luciddocks/Dock.qml
+++ b/luciddocks/Dock.qml
@@ -683,4 +683,8 @@
readonly property var searchEngines: ({
+ "lair": {
+ "name": "Lair",
+ "url": "https://s.lair.moe/web?s="
+ },
"duckduckgo": {
"name": "DuckDuckGo",
"url": "https://duckduckgo.com/?q="
--- a/lucidprefs/LauncherPage.qml
+++ b/lucidprefs/LauncherPage.qml
@@ -386,5 +386,8 @@
current: Prefs.launcherSearchEngine
options: [{
+ "key": "lair",
+ "label": "Lair"
+ }, {
"key": "duckduckgo",
"label": "DuckDuckGo"
}, {
'')
];
}; };
wallpaperDir = "${config.home.homeDirectory}/Wallpapers"; wallpaperDir = "${config.home.homeDirectory}/Wallpapers";
wallpaperScript = "${config.home.homeDirectory}/.config/hypr/scripts/wallpaper/set-wallpaper.sh"; wallpaperScript = "${config.home.homeDirectory}/.config/hypr/scripts/wallpaper/set-wallpaper.sh";
widgetLayout = if osConfig.networking.hostName == "Rias" widgetLayout = if osConfig.networking.hostName == "Rias"
then ../../../modules/user/lucid/lucid-widgets-rias.json then ./lucid-widgets-rias.json
else ../../../modules/user/lucid/lucid-widgets.json; else ./lucid-widgets.json;
defaultWallpaper = "${wallpaperDir}/bluehour.jpg"; defaultWallpaper = "${wallpaperDir}/bluehour.jpg";
hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; }; hyprLua = import ../hyprland/lua.nix { inherit lib; };
colors = config.lib.stylix.colors.withHashtag; colors = config.lib.stylix.colors.withHashtag;
paletteFile = pkgs.runCommand "lucid-stylix-palette.json" { paletteFile = pkgs.runCommand "lucid-stylix-palette.json" {
nativeBuildInputs = [ pkgs.python3 ]; nativeBuildInputs = [ pkgs.python3 ];
@@ -106,6 +133,29 @@ PY
user = true; user = true;
}); });
themeName = pkgs.writeText "lucid-current-theme" "stylix\n"; themeName = pkgs.writeText "lucid-current-theme" "stylix\n";
chestOsdPatch = pkgs.writeText "lucid-chest-osd.patch" ''
--- a/lucidosd/Osd.qml
+++ b/lucidosd/Osd.qml
@@ -26 +26 @@
- readonly property int brightnessPercent: osdWindow.maxBrightness > 0 ? Math.round((parseInt(brightnessFile.text()) / osdWindow.maxBrightness) * 100) : 0
+ property int brightnessPercent: 0
@@ -378,2 +378,15 @@
onFileChanged: reload()
+ onLoaded: {
+ const value = parseInt(brightnessFile.text());
+ if (osdWindow.maxBrightness > 0 && !isNaN(value))
+ osdWindow.brightnessPercent = Math.round(value / osdWindow.maxBrightness * 100);
+ }
}
+
+ Timer {
+ id: chestBrightnessPoll
+ interval: 500
+ repeat: true
+ running: osdWindow.backlightDevice !== ""
+ onTriggered: brightnessFile.reload()
+ }
'';
themeAutoPatch = pkgs.writeText "lucid-theme-auto.patch" '' themeAutoPatch = pkgs.writeText "lucid-theme-auto.patch" ''
--- a/Prefs.qml --- a/Prefs.qml
+++ b/Prefs.qml +++ b/Prefs.qml
@@ -211,10 +261,27 @@ PY
''; '';
qmlPackages = with pkgs.qt6; [ qt5compat qtmultimedia ]; qmlPackages = with pkgs.qt6; [ qt5compat qtmultimedia ];
tesseract = pkgs.tesseract4.override { enableLanguages = [ "eng" "rus" ]; }; tesseract = pkgs.tesseract4.override { enableLanguages = [ "eng" "rus" ]; };
shellFile = if isChest then pkgs.writeText "lucid-chest-shell.qml" (builtins.replaceStrings [
''import "./lucidlock"''
" WidgetLayer {\n }\n"
" WidgetIpc {\n }\n"
" Lock {\n }\n"
" void Clip.probed;"
] [
""
""
""
""
" void Notifs.count;\n void KdeConnect.installed;\n void Clip.probed;"
] (builtins.readFile ./lucid-shell.qml)) else ./lucid-shell.qml;
prefsFilter = if isChest then
''.barEnabled = true | .fontFamily = $font | .liveWallpapers = false | .idleLock = false | .idleLockBeforeSleep = false | .launcherPowerButtons = "suspend,reboot,shutdown" | .powerModuleActions = "suspend,hibernate,logout,reboot,shutdown"''
else
''.barEnabled = true | .widgetOnTop = false | .widgetHideFullscreen = true | .fontFamily = $font | .wallpaperFolder = $wallpaperDir | .liveDecoder = $decoder'';
lucid = pkgs.writeShellScript "lucid" '' lucid = pkgs.writeShellScript "lucid" ''
export NIXPKGS_QT6_QML_IMPORT_PATH="${lib.makeSearchPath "lib/qt-6/qml" qmlPackages}:''${NIXPKGS_QT6_QML_IMPORT_PATH:-}" export NIXPKGS_QT6_QML_IMPORT_PATH="${lib.makeSearchPath "lib/qt-6/qml" qmlPackages}:''${NIXPKGS_QT6_QML_IMPORT_PATH:-}"
export QT_PLUGIN_PATH="${lib.makeSearchPath "lib/qt-6/plugins" qmlPackages}:''${QT_PLUGIN_PATH:-}" export QT_PLUGIN_PATH="${lib.makeSearchPath "lib/qt-6/plugins" qmlPackages}:''${QT_PLUGIN_PATH:-}"
export PATH="${lib.makeBinPath (with pkgs; [ bash cliphist coreutils curl ffmpeg grim imagemagick jq libnotify pulseaudio kdeConnectBridgePython pywal16 wf-recorder wl-clipboard xdg-utils ])}:${tesseract}/bin:$PATH" export PATH="${lib.makeBinPath (with pkgs; [ bash brightnessctl cliphist coreutils curl ffmpeg grim imagemagick jq libnotify pulseaudio kdeConnectBridgePython pywal16 wf-recorder wl-clipboard xdg-utils ])}:${tesseract}/bin:$PATH"
exec ${pkgs.quickshell}/bin/qs --no-duplicate --path "${config.home.homeDirectory}/.config/quickshell" exec ${pkgs.quickshell}/bin/qs --no-duplicate --path "${config.home.homeDirectory}/.config/quickshell"
''; '';
startWallpaper = pkgs.writeShellScript "lucid-wallpaper-start" '' startWallpaper = pkgs.writeShellScript "lucid-wallpaper-start" ''
@@ -261,7 +328,27 @@ in {
--exclude='/lucidkeys/state.json' \ --exclude='/lucidkeys/state.json' \
--exclude='/lucidwidgets/widgets.json' \ --exclude='/lucidwidgets/widgets.json' \
"${source}/" "$target/" "${source}/" "$target/"
$DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch -p1 -d "$target" < ${../../../modules/user/lucid/idle-work.patch} ${lib.optionalString isChest ''
# Notifs refers to Lockscreen even without a lock surface. Keep its
# singleton from taking over logind lock signals or its LockedHint.
lock_qml="$target/Lockscreen.qml"
if ! grep -Fq 'return; // Lucid lock disabled for chest' "$lock_qml"; then
grep -Fq 'function lock(settle) {' "$lock_qml" && \
grep -Fq 'function pushLockedHint() {' "$lock_qml" && \
grep -Fq 'id: logindWatch' "$lock_qml" || {
echo "Lucid lock integration changed; refusing to leave it active for chest" >&2
exit 1
}
$DRY_RUN_CMD sed -i \
-e '/function lock(settle) {/a\ return; // Lucid lock disabled for chest' \
-e '/function pushLockedHint() {/a\ return; // Lucid lock disabled for chest' \
-e '/id: logindWatch/{n;n;s/running: true/running: false/;}' "$lock_qml"
fi
if ! grep -Fq 'id: chestBrightnessPoll' "$target/lucidosd/Osd.qml"; then
$DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch --forward -p1 -d "$target" < ${chestOsdPatch}
fi
''}
$DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch -p1 -d "$target" < ${./idle-work.patch}
if ! grep -Fq 'mode === "auto"' "$target/Prefs.qml"; then if ! grep -Fq 'mode === "auto"' "$target/Prefs.qml"; then
$DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch --forward -p1 -d "$target" < ${themeAutoPatch} $DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch --forward -p1 -d "$target" < ${themeAutoPatch}
fi fi
@@ -300,14 +387,17 @@ in {
// Nix focus workaround for Hyprland 0.57: detach pointer and keyboard focus while menus are open.\ // Nix focus workaround for Hyprland 0.57: detach pointer and keyboard focus while menus are open.\
Quickshell.execDetached(["hyprctl", "eval", "hl.config({ input = { follow_mouse = " + (dockWindow.menuOpen ? 2 : 1) + " } })"]);' "$dock_qml" Quickshell.execDetached(["hyprctl", "eval", "hl.config({ input = { follow_mouse = " + (dockWindow.menuOpen ? 2 : 1) + " } })"]);' "$dock_qml"
fi fi
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/lucid-shell.qml} "$target/shell.qml" $DRY_RUN_CMD install -m644 ${shellFile} "$target/shell.qml"
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/LucidBar.qml} "$target/LucidBar.qml" $DRY_RUN_CMD install -m644 ${./LucidBar.qml} "$target/LucidBar.qml"
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/Agenda.qml} "$target/Agenda.qml" ${lib.optionalString (!isChest) ''
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/CalendarSource.qml} "$target/CalendarSource.qml" $DRY_RUN_CMD install -m644 ${./Agenda.qml} "$target/Agenda.qml"
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/ClockCalendar.qml} "$target/lucidbar/ClockCalendar.qml" $DRY_RUN_CMD install -m644 ${./CalendarSource.qml} "$target/CalendarSource.qml"
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/thunderbird-calendar.py} "$target/thunderbird-calendar.py" $DRY_RUN_CMD install -m644 ${./ClockCalendar.qml} "$target/lucidbar/ClockCalendar.qml"
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/WidgetLayer.qml} "$target/lucidwidgets/WidgetLayer.qml" $DRY_RUN_CMD install -m644 ${./thunderbird-calendar.py} "$target/thunderbird-calendar.py"
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/WidgetsPage.qml} "$target/lucidprefs/WidgetsPage.qml" ''}
$DRY_RUN_CMD install -m644 ${./WidgetLayer.qml} "$target/lucidwidgets/WidgetLayer.qml"
$DRY_RUN_CMD install -m644 ${./WidgetsPage.qml} "$target/lucidprefs/WidgetsPage.qml"
${lib.optionalString (!isChest) ''
$DRY_RUN_CMD mkdir -p "${wallpaperDir}" \ $DRY_RUN_CMD mkdir -p "${wallpaperDir}" \
"${config.home.homeDirectory}/.config/hypr/scripts/wallpaper" "${config.home.homeDirectory}/.config/hypr/scripts/wallpaper"
$DRY_RUN_CMD install -m755 "${source}/support/wallpaper/set-wallpaper.sh" \ $DRY_RUN_CMD install -m755 "${source}/support/wallpaper/set-wallpaper.sh" \
@@ -315,16 +405,17 @@ in {
if ! grep -Fq 'CURRENT_THEME" == matugen' "${wallpaperScript}"; then if ! grep -Fq 'CURRENT_THEME" == matugen' "${wallpaperScript}"; then
$DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch --forward -p1 -d "$(dirname ${lib.escapeShellArg wallpaperScript})" < ${wallpaperAutoPatch} $DRY_RUN_CMD ${pkgs.patch}/bin/patch --batch --forward -p1 -d "$(dirname ${lib.escapeShellArg wallpaperScript})" < ${wallpaperAutoPatch}
fi fi
''}
lucid_dir="${config.home.homeDirectory}/.config/lucid" lucid_dir="${config.home.homeDirectory}/.config/lucid"
$DRY_RUN_CMD mkdir -p "$lucid_dir/themes" $DRY_RUN_CMD mkdir -p "$lucid_dir/themes"
if [ "${host}" = Rias ] && [ ! -s "$lucid_dir/keybinds.json" ]; then if [ "${host}" = Rias ] && [ ! -s "$lucid_dir/keybinds.json" ]; then
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/lucid-keybinds-rias.json} "$lucid_dir/keybinds.json" $DRY_RUN_CMD install -m644 ${./lucid-keybinds-rias.json} "$lucid_dir/keybinds.json"
fi fi
monitor_file="${config.home.homeDirectory}/.config/hypr/lucid-monitors.lua" monitor_file="${config.home.homeDirectory}/.config/hypr/lucid-monitors.lua"
if [ "${host}" = Rias ] && { [ ! -s "$monitor_file" ] || ! grep -qE 'output[[:space:]]*=' "$monitor_file"; } && \ if [ "${host}" = Rias ] && { [ ! -s "$monitor_file" ] || ! grep -qE 'output[[:space:]]*=' "$monitor_file"; } && \
! grep -qE 'workspace[[:space:]]*=' "$monitor_file" 2>/dev/null; then ! grep -qE 'workspace[[:space:]]*=' "$monitor_file" 2>/dev/null; then
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/lucid-monitors-rias.lua} "$monitor_file" $DRY_RUN_CMD install -m644 ${./lucid-monitors-rias.lua} "$monitor_file"
fi fi
$DRY_RUN_CMD ${pkgs.rsync}/bin/rsync -rltp --chmod=Du+rwx,Fu+rw --ignore-existing \ $DRY_RUN_CMD ${pkgs.rsync}/bin/rsync -rltp --chmod=Du+rwx,Fu+rw --ignore-existing \
"${source}/support/lucid/themes/" "$lucid_dir/themes/" "${source}/support/lucid/themes/" "$lucid_dir/themes/"
@@ -340,14 +431,14 @@ in {
"$lucid_dir/apply-theme.sh" "$lucid_dir/apply-theme.sh"
if [ ! -e "$target/lucidprefs/prefs.json" ]; then if [ ! -e "$target/lucidprefs/prefs.json" ]; then
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/lucid-prefs.json} "$target/lucidprefs/prefs.json" $DRY_RUN_CMD install -m644 ${if isChest then "${source}/defaults/prefs.json" else ./lucid-prefs.json} "$target/lucidprefs/prefs.json"
fi fi
if [ -z "''${DRY_RUN_CMD:-}" ] && [ -f "$target/lucidprefs/prefs.json" ]; then if [ -z "''${DRY_RUN_CMD:-}" ] && [ -f "$target/lucidprefs/prefs.json" ]; then
prefs_tmp=$(${pkgs.coreutils}/bin/mktemp "$target/lucidprefs/prefs.json.XXXXXX") prefs_tmp=$(${pkgs.coreutils}/bin/mktemp "$target/lucidprefs/prefs.json.XXXXXX")
if ${pkgs.jq}/bin/jq --arg font ${lib.escapeShellArg config.stylix.fonts.sansSerif.name} \ if ${pkgs.jq}/bin/jq --arg font ${lib.escapeShellArg config.stylix.fonts.sansSerif.name} \
--arg wallpaperDir ${lib.escapeShellArg wallpaperDir} \ --arg wallpaperDir ${lib.escapeShellArg wallpaperDir} \
--arg decoder ${lib.escapeShellArg liveDecoder} \ --arg decoder ${lib.escapeShellArg liveDecoder} \
'.barEnabled = true | .widgetOnTop = false | .widgetHideFullscreen = true | .fontFamily = $font | .wallpaperFolder = $wallpaperDir | .liveDecoder = $decoder' \ ${lib.escapeShellArg prefsFilter} \
"$target/lucidprefs/prefs.json" > "$prefs_tmp"; then "$target/lucidprefs/prefs.json" > "$prefs_tmp"; then
${pkgs.coreutils}/bin/chmod 644 "$prefs_tmp" ${pkgs.coreutils}/bin/chmod 644 "$prefs_tmp"
${pkgs.coreutils}/bin/mv "$prefs_tmp" "$target/lucidprefs/prefs.json" ${pkgs.coreutils}/bin/mv "$prefs_tmp" "$target/lucidprefs/prefs.json"
@@ -357,9 +448,9 @@ in {
fi fi
fi fi
if [ ! -e "$target/luciddocks/pinned.json" ]; then if [ ! -e "$target/luciddocks/pinned.json" ]; then
$DRY_RUN_CMD install -m644 ${../../../modules/user/lucid/lucid-pinned.json} "$target/luciddocks/pinned.json" $DRY_RUN_CMD install -m644 ${./lucid-pinned.json} "$target/luciddocks/pinned.json"
fi fi
if [ ! -e "$target/lucidwidgets/widgets.json" ]; then if [ "${if isChest then "false" else "true"}" = true ] && [ ! -e "$target/lucidwidgets/widgets.json" ]; then
$DRY_RUN_CMD install -m644 ${widgetLayout} "$target/lucidwidgets/widgets.json" $DRY_RUN_CMD install -m644 ${widgetLayout} "$target/lucidwidgets/widgets.json"
fi fi
@@ -402,11 +493,10 @@ in {
PartOf = [ "graphical-session.target" ]; PartOf = [ "graphical-session.target" ];
}; };
Service = { Service = {
ExecStartPre = "${startWallpaper}";
ExecStart = "${lucid}"; ExecStart = "${lucid}";
Restart = "on-failure"; Restart = "on-failure";
RestartSec = 2; RestartSec = 2;
}; } // lib.optionalAttrs (!isChest) { ExecStartPre = "${startWallpaper}"; };
Install.WantedBy = [ "hyprland-session.target" ]; Install.WantedBy = [ "hyprland-session.target" ];
}; };
+1 -1
View File
@@ -144,7 +144,7 @@
"launcherPowerButtons": "lock,suspend,reboot,shutdown", "launcherPowerButtons": "lock,suspend,reboot,shutdown",
"launcherPowerChips": false, "launcherPowerChips": false,
"launcherPowerSearch": true, "launcherPowerSearch": true,
"launcherSearchEngine": "duckduckgo", "launcherSearchEngine": "lair",
"launcherSearchPosition": "bottom", "launcherSearchPosition": "bottom",
"launcherSettingsResults": true, "launcherSettingsResults": true,
"launcherWebRow": true, "launcherWebRow": true,
+4
View File
@@ -1,5 +1,6 @@
import "./luciddocks" import "./luciddocks"
import "./lucidedit" import "./lucidedit"
import "./lucidlock"
import "./lucidosd" import "./lucidosd"
import "./lucidprefs" import "./lucidprefs"
import "./lucidshot" import "./lucidshot"
@@ -127,6 +128,9 @@ ShellRoot {
WidgetIpc { WidgetIpc {
} }
Lock {
}
EditLayer { EditLayer {
} }
+1 -4
View File
@@ -189,9 +189,6 @@ in {
}; };
wayland.windowManager.hyprland.settings.bind = [ wayland.windowManager.hyprland.settings.bind = [
(hyprLua.bind "SUPER + D" (hyprLua.bind "SUPER + D" (hyprLua.execLauncher "qs ipc call launcher toggle"))
(if config.home.username == "sweetbread"
then hyprLua.execLauncher "qs ipc call launcher toggle"
else hyprLua.exec "walker"))
]; ];
} }
+1
View File
@@ -1,6 +1,7 @@
{ pkgs, pkgs-pinned, host, ... }: { { pkgs, pkgs-pinned, host, ... }: {
imports = [ imports = [
../../modules/user/packages/cs_utils.nix ../../modules/user/packages/cs_utils.nix
../../modules/user/lucid
]; ];
disabledModules = [ disabledModules = [
../../modules/user/packages/art.nix ../../modules/user/packages/art.nix
+2
View File
@@ -44,6 +44,8 @@
]; ];
programs.zsh.enable = true; programs.zsh.enable = true;
programs.kdeconnect.enable = true;
home-manager.users.${name}.services.kdeconnect.enable = true;
users = { users = {
defaultUserShell = pkgs.zsh; defaultUserShell = pkgs.zsh;
+1 -1
View File
@@ -1,5 +1,5 @@
{ pkgs, ... }: { { pkgs, ... }: {
imports = [ ./modules/lucid.nix ]; imports = [ ../../modules/user/lucid ];
programs.hyprlock.enable = true; programs.hyprlock.enable = true;
home.packages = with pkgs; [ home.packages = with pkgs; [