From c654ed39408e2ea02686bff354e67304ac236145 Mon Sep 17 00:00:00 2001 From: elwrcl Date: Thu, 27 Aug 2026 15:51:24 +0300 Subject: [PATCH] big --- flake.nix | 7 + hosts/copland.ulu.nix | 3 + hosts/sohryu-darwin.ulu.nix | 1 - modules/home/home-browser-helium.ulu.nix | 4 - modules/home/home-browser-zen.ulu.nix | 2 +- modules/home/home-cursor.ulu.nix | 18 +- .../home/home-file-manager-actions.ulu.nix | 369 +++++------------- modules/home/home-file-manager.ulu.nix | 154 +------- modules/home/home-gtk.ulu.nix | 20 +- modules/home/home-icons.ulu.nix | 12 + modules/home/home-mimeapps.ulu.nix | 2 +- modules/home/home-qt.ulu.nix | 77 +++- .../home/niri/desktop-niri-keybinds.ulu.nix | 2 +- modules/home/theme/home-theme-kemuri.ulu.nix | 31 ++ modules/home/theme/home-theme.ulu.nix | 15 + modules/nixos/common/common-packages.ulu.nix | 10 +- 16 files changed, 291 insertions(+), 436 deletions(-) create mode 100644 modules/home/home-icons.ulu.nix create mode 100644 modules/home/theme/home-theme-kemuri.ulu.nix create mode 100644 modules/home/theme/home-theme.ulu.nix diff --git a/flake.nix b/flake.nix index f9dd478..80f9b3a 100644 --- a/flake.nix +++ b/flake.nix @@ -62,6 +62,13 @@ url = "github:elwrcl/heliux"; inputs.nixpkgs.follows = "nixpkgs"; }; + theme-assets = { + url = "github:elwrcl/copland-theme"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + themes = { + url = "github:RGBCube/ThemeNix"; + }; intel-hard = { url = "github:elwrcl/intel-hard"; }; diff --git a/hosts/copland.ulu.nix b/hosts/copland.ulu.nix index 3d73fbc..8992de8 100644 --- a/hosts/copland.ulu.nix +++ b/hosts/copland.ulu.nix @@ -47,6 +47,8 @@ in config.flake.homeModules.home-zellij-theme config.flake.homeModules.home-zellij-layout-ide config.flake.homeModules.home-zellij-ide-command + config.flake.homeModules.home-theme + config.flake.homeModules.home-theme-kemuri config.flake.homeModules.home-direnv config.flake.homeModules.home-jujutsu config.flake.homeModules.home-jujutsu-difftastic @@ -59,6 +61,7 @@ in config.flake.homeModules.home-session-vars config.flake.homeModules.home-cursor config.flake.homeModules.home-gtk + config.flake.homeModules.home-icons config.flake.homeModules.home-qt config.flake.homeModules.home-browser-zen config.flake.homeModules.home-browser-helium diff --git a/hosts/sohryu-darwin.ulu.nix b/hosts/sohryu-darwin.ulu.nix index 321cb15..5124d77 100644 --- a/hosts/sohryu-darwin.ulu.nix +++ b/hosts/sohryu-darwin.ulu.nix @@ -16,7 +16,6 @@ in { nixpkgs.config.allowUnfree = true; nixpkgs.config.allowDeprecatedx86_64Darwin = true; - nixpkgs.overlays = [ inputs.nix-vscode-extensions.overlays.default ]; home-manager = { useGlobalPkgs = true; diff --git a/modules/home/home-browser-helium.ulu.nix b/modules/home/home-browser-helium.ulu.nix index f2003d6..aef1e01 100644 --- a/modules/home/home-browser-helium.ulu.nix +++ b/modules/home/home-browser-helium.ulu.nix @@ -15,10 +15,6 @@ id = "dkdnancajokhfclpjpplkhlkbhaeejob"; hash = "sha256-hkEGW2JVQzeRmTpoPrWFoVG3sbCgHohnsr2b12rfeMg="; } - { - id = "jgejdcdoeeabklepnkdbglgccjpdgpmf"; - hash = "sha256-0xYJtbYNn0JwAaskB/qwdRt74ThSG1CcN41bTN4H88c="; - } { id = "jleldmehlnopjhbldegndecakdemocah"; hash = "sha256-u79qidIP1DCtusQ7COjjpnnInO/dXyBeNsJKNHnbIC4="; diff --git a/modules/home/home-browser-zen.ulu.nix b/modules/home/home-browser-zen.ulu.nix index 645edea..a40531e 100644 --- a/modules/home/home-browser-zen.ulu.nix +++ b/modules/home/home-browser-zen.ulu.nix @@ -17,7 +17,7 @@ programs.zen-browser = { enable = true; - setAsDefaultBrowser = true; + setAsDefaultBrowser = false; policies = { DisableAppUpdate = true; diff --git a/modules/home/home-cursor.ulu.nix b/modules/home/home-cursor.ulu.nix index 7d66388..b8a2bec 100644 --- a/modules/home/home-cursor.ulu.nix +++ b/modules/home/home-cursor.ulu.nix @@ -1,12 +1,22 @@ -{ ... }: +{ inputs, ... }: { flake.homeModules.home-cursor = - { pkgs, ... }: + { config, pkgs, ... }: + let + p = config.elars.theme.palette.withHashtag; + + cursors = inputs.theme-assets.lib.mkCursorTheme { + inherit pkgs; + themeName = "KemuriSusu-cursors"; + light = p.base05; + dark = p.base00; + }; + in { home.pointerCursor = { enable = true; - name = "macOS"; - package = pkgs.apple-cursor; + name = "KemuriSusu-cursors"; + package = cursors; size = 24; gtk.enable = true; x11.enable = true; diff --git a/modules/home/home-file-manager-actions.ulu.nix b/modules/home/home-file-manager-actions.ulu.nix index 585b64c..d314f33 100644 --- a/modules/home/home-file-manager-actions.ulu.nix +++ b/modules/home/home-file-manager-actions.ulu.nix @@ -3,34 +3,25 @@ flake.homeModules.home-file-manager-actions = { pkgs, lib, ... }: let - inherit (lib) - concatStringsSep - concatMapStringsSep - escapeXML - optional - ; + inherit (lib) concatStringsSep concatMap optional; + fmActions = pkgs.writeShellApplication { name = "fm-actions"; runtimeInputs = with pkgs; [ poppler-utils wl-clipboard imagemagick - libarchive coreutils libnotify tesseract ffmpeg - gnutar - p7zip - zstd - zip ]; text = '' op="''${1:-}" if [ "$#" -gt 0 ]; then shift; fi notify() { - notify-send -a Thunar -i system-file-manager "$1" "''${2:-}" || true + notify-send -a Dolphin -i system-file-manager "$1" "''${2:-}" || true } finish() { status=$? @@ -38,15 +29,18 @@ printf '\n[fm-actions] exit %s — press enter to close\n' "$status" read -r _ || true elif [ "$status" -ne 0 ]; then - notify-send -a Thunar -u critical "action failed" \ + notify-send -a Dolphin -u critical "action failed" \ "fm-actions ''${op:-?} exited with $status" || true fi } trap finish EXIT stem() { printf '%s' "''${1%.*}"; } - escape_own_folder() { - if [ ! -e "$1" ] && [ "$(basename -- "$PWD")" = "$1" ]; then - cd .. || exit 1 + require_count() { + n="$1"; shift + if [ "$#" -ne "$n" ]; then + notify-send -a Dolphin -u critical "action failed" \ + "expected $n item(s), got $#" || true + exit 2 fi } case "$op" in @@ -91,10 +85,6 @@ for f in "$@"; do magick "$f" -strip "$f"; done notify "metadata stripped" "$# image(s)" ;; - ocr) - tesseract "$1" - -l eng+tur 2>/dev/null | wl-copy - notify "OCR" "recognised text copied to clipboard" - ;; wallpaper) noctalia msg wallpaper-set "$1" ;; @@ -129,42 +119,19 @@ done ;; - zip) - escape_own_folder "$1" - zip -r -- "$1.zip" "$@" - notify "archive created" "$1.zip" - ;; - 7z) - escape_own_folder "$1" - 7z a -- "$1.7z" "$@" - notify "archive created" "$1.7z" - ;; - tar-zst) - escape_own_folder "$1" - tar --zstd -cf "$1.tar.zst" -- "$@" - notify "archive created" "$1.tar.zst" - ;; - extract) - for f in "$@"; do bsdtar -xf "$f"; done - notify "extracted" "$# archive(s)" - ;; - extract-to-folder) - for f in "$@"; do - d="$(stem "$f")" - mkdir -p "$d" - bsdtar -xf "$f" -C "$d" - done - notify "extracted into folders" "$# archive(s)" - ;; - pdf-images) for f in "$@"; do pdftoppm -png -r 150 "$f" "$(stem "$f")"; done notify "PDF rendered" "$# document(s)" ;; pdf-merge) + require_count 2 "$@" 2>/dev/null || true pdfunite "$@" merged.pdf notify "PDFs merged" "merged.pdf" ;; + compare) + require_count 2 "$@" + meld "$@" + ;; *) echo "fm-actions: unknown operation: $op" >&2 @@ -176,378 +143,258 @@ fm = lib.getExe fmActions; term = "ghostty --working-directory=%f"; - dirs = [ "directories" ]; - files = [ - "audio-files" - "image-files" - "other-files" - "text-files" - "video-files" - ]; - everything = dirs ++ files; - archivePatterns = [ - "*.7z" - "*.bz2" - "*.cab" - "*.gz" - "*.iso" - "*.rar" - "*.tar" - "*.tar.bz2" - "*.tar.gz" - "*.tar.xz" - "*.tar.zst" - "*.tbz2" - "*.tgz" - "*.txz" - "*.xz" - "*.zip" - "*.zst" - ]; - - mkAction = - { - id, - name, - command, - icon ? "", - description ? "", - patterns ? [ "*" ], - types ? [ ], - submenu ? null, - range ? null, - startupNotify ? true, - }: - concatStringsSep "\n" ( - [ " " ] - ++ map (line: " " + line) ( - [ - "${escapeXML icon}" - "${escapeXML name}" - "${escapeXML id}" - "${escapeXML command}" - "${escapeXML description}" - "${escapeXML (concatStringsSep ";" patterns)}" - ] - ++ optional (submenu != null) "${escapeXML submenu}" - ++ optional (range != null) "${escapeXML range}" - ++ optional startupNotify "" - ++ map (t: "<${t}/>") types - ) - ++ [ " " ] - ); - - # this is slop but idc. + typeMime = { + directories = [ "inode/directory" ]; + everything = [ "all/all" ]; + files = [ "all/allfiles" ]; + audio-files = [ "audio/*" ]; + image-files = [ "image/*" ]; + video-files = [ "video/*" ]; + text-files = [ "text/*" ]; + }; + pdfMimeTypes = [ "application/pdf" ]; actions = [ { id = "open-terminal-here"; - name = "Open Terminal Here"; - description = "browse folder in ghostty"; + name = "open ghostty here"; icon = "utilities-terminal"; command = term; - types = dirs; + types = [ "directories" ]; } { id = "open-root-terminal-here"; - name = "Open Root Terminal Here"; - description = "browse folder in ghostty as root"; + name = "open root terminal here"; icon = "dialog-password"; command = "${term} -e sudo -E -s"; - types = dirs; + types = [ "directories" ]; } { id = "open-yazi-here"; - name = "Open Yazi Here"; - description = "browse folder in yazi"; + name = "open yazi here"; icon = "system-file-manager"; command = "${term} -e yazi"; - types = dirs; + types = [ "directories" ]; } { id = "open-as-root"; - name = "Open as Root"; - description = "reopen folder as root"; + name = "open as root"; icon = "security-high"; - command = "thunar admin://%f"; - types = dirs; - } - { - id = "open-in-code"; - name = "Open in VS Code"; - description = "open in vsc"; - icon = "applications-development"; - command = "code %F"; - types = everything; - } - { - id = "search-here"; - name = "Search Here"; - description = "search in this folder with catfish"; - icon = "system-search"; - command = "catfish --path=%f"; - types = dirs; + command = "dolphin admin://%f"; + types = [ "directories" ]; } { id = "open-lazyjj-here"; - name = "Open lazyjj Here"; - description = "inspect with lazyjj"; + name = "open lazyjj here"; icon = "folder-open"; command = "${term} -e lazyjj"; - types = dirs; + types = [ "directories" ]; } { id = "open-lazygit-here"; - name = "Open lazygit Here"; - description = "inspect with lazygit"; + name = "open lazygit here"; icon = "folder-open"; command = "${term} -e lazygit"; - types = dirs; - } - { - id = "play-in-mpv"; - name = "Play in mpv"; - description = "play with mpv"; - icon = "multimedia-player"; - command = "mpv -- %F"; - types = [ - "audio-files" - "video-files" - ]; + types = [ "directories" ]; } { id = "compare-in-meld"; - name = "Compare in Meld"; - description = "diff exactly two files or folders"; + name = "compare in meld"; icon = "document-properties"; - command = "meld %F"; - range = "2-2"; - types = everything; - } - { - id = "archive-extract-here"; - name = "Extract Here"; - description = "unpack content into the current folder"; - icon = "package-x-generic"; - command = "${fm} extract %F"; - patterns = archivePatterns; - submenu = "Archive"; - types = [ "other-files" ]; - } - { - id = "archive-extract-to-folder"; - name = "Extract to Folder"; - description = "unpack into a folder named after the archive"; - icon = "package-x-generic"; - command = "${fm} extract-to-folder %F"; - patterns = archivePatterns; - submenu = "Archive"; - types = [ "other-files" ]; - } - { - id = "archive-zip"; - name = "Compress to .zip"; - icon = "package-x-generic"; - command = "${fm} zip %N"; - submenu = "Archive"; - types = everything; - } - { - id = "archive-7z"; - name = "Compress to .7z"; - icon = "package-x-generic"; - command = "${fm} 7z %N"; - submenu = "Archive"; - types = everything; - } - { - id = "archive-tar-zst"; - name = "Compress to .tar.zst"; - icon = "package-x-generic"; - command = "${fm} tar-zst %N"; - submenu = "Archive"; - types = everything; + command = "${fm} compare %F"; + types = [ "everything" ]; } { id = "image-to-png"; - name = "Convert to PNG"; + name = "convert to PNG"; icon = "image-x-generic"; command = "${fm} img-png %F"; - submenu = "Image"; types = [ "image-files" ]; + submenu = "Image"; } { id = "image-to-jpg"; - name = "Convert to JPEG"; + name = "convert to JPEG"; icon = "image-x-generic"; command = "${fm} img-jpg %F"; - submenu = "Image"; types = [ "image-files" ]; + submenu = "Image"; } { id = "image-to-webp"; - name = "Convert to WebP"; + name = "convert to WebP"; icon = "image-x-generic"; command = "${fm} img-webp %F"; - submenu = "Image"; types = [ "image-files" ]; + submenu = "Image"; } { id = "image-resize-1920"; - name = "Resize to 1920px"; - description = "shrink to 1920px wide but keep aspect ratio"; + name = "resize to 1920px"; icon = "image-x-generic"; command = "${fm} img-resize %F"; - submenu = "Image"; types = [ "image-files" ]; + submenu = "Image"; } { id = "image-strip-metadata"; - name = "Strip Metadata"; - description = "remove EXIF and other metadata from images"; + name = "strip metadata"; icon = "image-x-generic"; command = "${fm} img-strip %F"; - submenu = "Image"; types = [ "image-files" ]; - } - { - id = "image-ocr"; - name = "OCR to Clipboard"; - description = "ocr to clipboard"; - icon = "edit-copy"; - command = "${fm} ocr %f"; submenu = "Image"; - types = [ "image-files" ]; } { id = "image-set-wallpaper"; name = "Set as Wallpaper"; icon = "preferences-desktop-wallpaper"; command = "${fm} wallpaper %f"; - submenu = "Image"; types = [ "image-files" ]; + submenu = "Image"; } { id = "media-to-mp4"; - name = "Convert to MP4"; - description = "H.264 / AAC, CRF 20"; + name = "convert to MP4"; icon = "video-x-generic"; command = "ghostty -e ${fm} vid-mp4 %F"; - submenu = "Media"; types = [ "video-files" ]; + submenu = "Media"; } { id = "media-extract-audio"; - name = "Extract Audio (MP3)"; + name = "extract Audio (MP3)"; icon = "audio-x-generic"; command = "ghostty -e ${fm} vid-audio %F"; - submenu = "Media"; types = [ "audio-files" "video-files" ]; + submenu = "Media"; } { id = "media-to-gif"; - name = "Make GIF"; - description = "640px, 15 fps, optimized"; + name = "make GIF"; icon = "video-x-generic"; command = "ghostty -e ${fm} vid-gif %F"; - submenu = "Media"; types = [ "video-files" ]; + submenu = "Media"; } { id = "media-info"; - name = "Media Info"; - description = "ffprobe the selection"; + name = "media info"; icon = "dialog-information"; command = "ghostty -e ${fm} media-info %F"; - submenu = "Media"; types = [ "audio-files" "image-files" "video-files" ]; + submenu = "Media"; } { id = "pdf-to-images"; - name = "Render to PNG"; - description = "150 dpi, one file per page"; + name = "render to PNG"; icon = "application-pdf"; command = "${fm} pdf-images %F"; - patterns = [ "*.pdf" ]; + mimeTypes = pdfMimeTypes; submenu = "PDF"; - types = [ "other-files" ]; } { id = "pdf-merge"; - name = "Merge into merged.pdf"; + name = "merge into merged.pdf"; icon = "application-pdf"; command = "${fm} pdf-merge %F"; - patterns = [ "*.pdf" ]; - range = "2-64"; + mimeTypes = pdfMimeTypes; submenu = "PDF"; - types = [ "other-files" ]; } { id = "tools-copy-path"; - name = "Copy Full Path"; + name = "copy full path"; icon = "edit-copy"; command = "${fm} copy-path %F"; + types = [ "everything" ]; submenu = "Tools"; - types = everything; } { id = "tools-copy-content"; - name = "Copy File Contents"; + name = "copy file contents"; icon = "edit-copy"; command = "${fm} copy-content %F"; - submenu = "Tools"; types = [ "text-files" ]; + submenu = "Tools"; } { id = "tools-checksum"; name = "SHA-256 Checksum"; icon = "dialog-information"; command = "ghostty -e ${fm} checksum %F"; + types = [ "files" ]; submenu = "Tools"; - types = files; } { id = "tools-duplicate"; name = "Duplicate"; - description = "copy alongside as .copy"; icon = "edit-copy"; command = "${fm} duplicate %F"; + types = [ "everything" ]; submenu = "Tools"; - types = everything; } { id = "tools-symlink"; name = "Create Symlink Here"; icon = "emblem-symbolic-link"; command = "${fm} symlink %F"; + types = [ "everything" ]; submenu = "Tools"; - types = everything; } { id = "tools-dos2unix"; name = "Fix Line Endings"; - description = "convert CRLF to LF"; icon = "text-x-generic"; command = "dos2unix -- %F"; - submenu = "Tools"; types = [ "text-files" ]; + submenu = "Tools"; } ]; + + mkServiceMenu = + { + id, + name, + command, + icon ? "", + types ? null, + mimeTypes ? null, + submenu ? null, + }: + let + mimes = if mimeTypes != null then mimeTypes else concatMap (t: typeMime.${t}) types; + in + concatStringsSep "\n" ( + [ + "[Desktop Entry]" + "Type=Service" + "X-KDE-ServiceTypes=KonqPopupMenu/Plugin" + "MimeType=${concatStringsSep ";" mimes};" + "Actions=${id};" + ] + ++ optional (submenu != null) "X-KDE-Submenu=${submenu}" + ++ [ + "" + "[Desktop Action ${id}]" + "Name=${name}" + "Icon=${icon}" + "Exec=${command}" + ] + ); in { home.packages = [ fmActions ]; - xdg.configFile."Thunar/uca.xml".text = '' - - - ${concatMapStringsSep "\n" mkAction actions} - - ''; + xdg.dataFile = builtins.listToAttrs ( + map (a: { + name = "kio/servicemenus/${a.id}.desktop"; + value.text = mkServiceMenu a; + }) actions + ); }; } diff --git a/modules/home/home-file-manager.ulu.nix b/modules/home/home-file-manager.ulu.nix index c92bfd9..7760ff6 100644 --- a/modules/home/home-file-manager.ulu.nix +++ b/modules/home/home-file-manager.ulu.nix @@ -4,142 +4,28 @@ { config, pkgs, ... }: let home = config.home.homeDirectory; - thunar = pkgs.thunar.override { - thunarPlugins = with pkgs; [ - thunar-media-tags-plugin - thunar-archive-plugin - thunar-vcs-plugin - thunar-volman - ]; - }; in { - home.packages = [ thunar ] ++ (with pkgs; [ catfish ]); - xfconf.settings.thunar = { - "default-view" = "ThunarIconsView"; - "last-view" = "ThunarIconsView"; - "last-icon-view-zoom-level" = "THUNAR_ZOOM_LEVEL_100_PERCENT"; - "last-details-view-zoom-level" = "THUNAR_ZOOM_LEVEL_38_PERCENT"; - "last-compact-view-zoom-level" = "THUNAR_ZOOM_LEVEL_50_PERCENT"; - "last-details-view-visible-columns" = - "THUNAR_COLUMN_NAME,THUNAR_COLUMN_SIZE,THUNAR_COLUMN_TYPE,THUNAR_COLUMN_DATE_MODIFIED"; - "last-details-view-fixed-columns" = false; - "misc-expandable-folders" = true; - "misc-compact-view-max-chars" = 50; - - # UI - "last-location-bar" = "ThunarLocationButtons"; - "last-side-pane" = "THUNAR_SIDEPANE_TYPE_SHORTCUTS"; - "last-menubar-visible" = false; - "last-statusbar-visible" = true; - "last-separator-position" = 180; - "misc-use-csd" = true; - "misc-small-toolbar-icons" = false; - "misc-text-beside-icons" = false; - "misc-symbolic-icons-in-toolbar" = true; - "misc-symbolic-icons-in-sidepane" = true; - "misc-window-title-style" = "THUNAR_WINDOW_TITLE_STYLE_FOLDER_NAME_WITHOUT_THUNAR_SUFFIX"; - "misc-change-window-icon" = true; - "misc-highlighting-enabled" = true; - "misc-status-bar-active-info" = { - type = "uint"; - value = 61; - }; - "misc-image-size-in-statusbar" = true; - "last-toolbar-items" = - "menu:0,back:1,forward:1,open-parent:1,open-home:1," - + "new-tab:0,new-window:0,toggle-split-view:1," - + "undo:1,redo:1,zoom-out:0,zoom-in:0,zoom-reset:0," - + "view-as-icons:0,view-as-detailed-list:0,view-as-compact-list:0,view-switcher:1," - + "location-bar:1,reload:1,search:1"; - - # SIDE PANE - "shortcuts-icon-size" = "THUNAR_ICON_SIZE_16"; - "shortcuts-icon-emblems" = true; - "tree-icon-size" = "THUNAR_ICON_SIZE_16"; - "tree-icon-emblems" = true; - "misc-tree-lines-in-tree-sidepane" = true; - - # SORT - "last-sort-column" = "THUNAR_COLUMN_NAME"; - "last-sort-order" = "GTK_SORT_ASCENDING"; - "misc-folders-first" = true; - "misc-case-sensitive" = false; - "last-show-hidden" = true; - - # TABS - "last-restore-tabs" = true; - "misc-open-new-window-as-tab" = true; - "misc-switch-to-new-tab" = true; - "misc-always-show-tabs" = false; - "misc-tab-close-middle-click" = true; - "misc-middle-click-in-tab" = true; - "misc-confirm-close-multiple-tabs" = true; - "misc-remember-geometry" = true; - "misc-vertical-split-pane" = false; - "misc-always-enable-split-view" = false; - - # THUMB - "misc-thumbnail-mode" = "THUNAR_THUMBNAIL_MODE_ONLY_LOCAL"; - "misc-thumbnail-draw-frames" = true; - "misc-thumbnail-max-file-size" = { - type = "uint64"; - value = 0; - }; - "misc-image-preview-mode" = "THUNAR_IMAGE_PREVIEW_MODE_EMBEDDED"; - "last-image-preview-visible" = false; - "misc-folder-item-count" = "THUNAR_FOLDER_ITEM_COUNT_ONLY_LOCAL"; - - # INTERACTION - "misc-single-click" = false; - "misc-ctrl-scroll-wheel-to-zoom" = true; - "misc-horizontal-wheel-navigates" = true; - "misc-date-style" = "THUNAR_DATE_STYLE_YYYYMMDD"; - "misc-file-size-binary" = true; - "misc-recursive-search" = "THUNAR_RECURSIVE_SEARCH_LOCAL"; - "misc-show-about-templates" = false; - "misc-directory-specific-settings" = false; - - # FILE OPERATIONS - "misc-volume-management" = true; - "misc-exec-shell-scripts-by-default" = "THUNAR_EXECUTE_SHELL_SCRIPT_ASK"; - "misc-recursive-permissions" = "THUNAR_RECURSIVE_PERMISSIONS_ASK"; - "misc-confirm-move-to-trash" = false; - "misc-show-delete-action" = true; - "misc-undo-redo-history-size" = 30; - "misc-parallel-copy-mode" = "THUNAR_PARALLEL_COPY_MODE_ONLY_LOCAL_SAME_DEVICES"; - "misc-transfer-use-partial" = "THUNAR_USE_PARTIAL_MODE_REMOTE"; - "misc-transfer-verify-file" = "THUNAR_VERIFY_FILE_MODE_REMOTE"; - }; - - xfconf.settings.thunar-volman = { - "automount-drives/enabled" = true; - "automount-media/enabled" = true; - "autobrowse/enabled" = true; - "autoopen/enabled" = false; - "autorun/enabled" = false; - "autoburn/enabled" = false; - "autoplay-audio-cds/enabled" = false; - "autoplay-video-cds/enabled" = false; - "autophoto/enabled" = false; - "autoipod/enabled" = false; - "autokeyboard/enabled" = false; - "automouse/enabled" = false; - "autoprinter/enabled" = false; - "autotablet/enabled" = false; - }; - - gtk.gtk3.bookmarks = [ - "file://${home}/copland nix" - "file://${home}/.config dotfiles" - "file://${home}/Documents" - "file://${home}/Downloads" - "file://${home}/Music" - "file://${home}/Pictures" - "file://${home}/Videos" - "file://${home}/Videos-HDD" - "file://${home}/Projects" - "file://${home}/ProjectsHDD" + home.packages = with pkgs; [ + kdePackages.dolphin + kdePackages.dolphin-plugins ]; + home.file.".local/share/user-places.xbel".text = '' + + + Home + nix + dotfiles + documents + downloads + music + pictures + videos + videos-xfs + projects + projects-xfs + + ''; }; } diff --git a/modules/home/home-gtk.ulu.nix b/modules/home/home-gtk.ulu.nix index 48508a1..74aa511 100644 --- a/modules/home/home-gtk.ulu.nix +++ b/modules/home/home-gtk.ulu.nix @@ -1,26 +1,28 @@ { ... }: { flake.homeModules.home-gtk = - { pkgs, ... }: + { config, pkgs, ... }: { gtk = { enable = true; - theme.name = "WhiteSur-Dark"; - theme.package = pkgs.whitesur-gtk-theme; - gtk4.theme.name = "WhiteSur-Dark"; - gtk4.theme.package = pkgs.whitesur-gtk-theme; - iconTheme.name = "WhiteSur-dark"; - iconTheme.package = pkgs.whitesur-icon-theme; + theme.name = "Adwaita-dark"; + theme.package = pkgs.gnome-themes-extra; + gtk4.theme.name = "adwaita-dark"; + iconTheme.name = "Adwaita"; + iconTheme.package = pkgs.adwaita-icon-theme; font = { name = "JetBrainsMono Nerd Font"; size = 11; }; + + gtk3.extraCss = config.elars.theme.palette.adwaitaGtkCss; + gtk4.extraCss = config.elars.theme.palette.adwaitaGtkCss; }; dconf.settings."org/gnome/desktop/interface" = { color-scheme = "prefer-dark"; gtk-application-prefer-dark-theme = true; - gtk-theme = "WhiteSur-Dark"; + gtk-theme = "Adwaita-dark"; }; }; -} +} \ No newline at end of file diff --git a/modules/home/home-icons.ulu.nix b/modules/home/home-icons.ulu.nix new file mode 100644 index 0000000..56d41f0 --- /dev/null +++ b/modules/home/home-icons.ulu.nix @@ -0,0 +1,12 @@ +{ inputs, ... }: +{ + flake.homeModules.home-icons = + { pkgs, ... }: + { + gtk.iconTheme = { + name = "int_nord"; + package = inputs.theme-assets.packages.${pkgs.stdenv.hostPlatform.system}.int-nord-icon-theme; + }; + + }; +} diff --git a/modules/home/home-mimeapps.ulu.nix b/modules/home/home-mimeapps.ulu.nix index f4d7947..8e5bfce 100644 --- a/modules/home/home-mimeapps.ulu.nix +++ b/modules/home/home-mimeapps.ulu.nix @@ -6,7 +6,7 @@ xdg.mimeApps = { enable = true; defaultApplications = { - "inode/directory" = [ "thunar.desktop" ]; + "inode/directory" = [ "org.kde.dolphin.desktop" ]; "x-scheme-handler/about" = [ "helium.desktop" ]; "x-scheme-handler/unknown" = [ "helium.desktop" ]; }; diff --git a/modules/home/home-qt.ulu.nix b/modules/home/home-qt.ulu.nix index d512ee0..1e809db 100644 --- a/modules/home/home-qt.ulu.nix +++ b/modules/home/home-qt.ulu.nix @@ -1,30 +1,79 @@ { ... }: { flake.homeModules.home-qt = - { pkgs, ... }: + { config, pkgs, ... }: + let + p = config.elars.theme.palette.withHashtag; + active = builtins.concatStringsSep ", " [ + p.base05 p.base01 p.base02 p.base02 p.base00 p.base01 + p.base05 p.base07 p.base05 p.base01 p.base00 p.base00 + p.base06 p.base00 p.base0D p.base0E p.base02 p.base01 + p.base01 p.base05 p.base04 + ]; + inactive = active; + disabled = builtins.concatStringsSep ", " [ + p.base04 p.base01 p.base02 p.base02 p.base00 p.base01 + p.base04 p.base06 p.base04 p.base01 p.base00 p.base00 + p.base02 p.base04 p.base04 p.base04 p.base02 p.base01 + p.base01 p.base04 p.base03 + ]; + + font = "JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0"; + in { qt = { enable = true; - platformTheme.name = "kde"; - style.name = "kvantum"; + platformTheme.name = "qtct"; + style.name = "qtct"; }; - xdg.configFile."Kvantum/WhiteSur-Dark/WhiteSur-Dark.kvconfig".source = - "${pkgs.whitesur-kde}/share/Kvantum/WhiteSur/WhiteSurDark.kvconfig"; - xdg.configFile."Kvantum/WhiteSur-Dark/WhiteSur-Dark.svg".source = - "${pkgs.whitesur-kde}/share/Kvantum/WhiteSur/WhiteSurDark.svg"; + home.packages = [ + pkgs.qt5ct + pkgs.qt6ct + ]; - xdg.configFile."Kvantum/kvantum.kvconfig".text = '' - [General] - theme=WhiteSur-Dark + xdg.configFile."qt5ct/colors/kemuri.conf".text = '' + [ColorScheme] + active_colors=${active} + inactive_colors=${inactive} + disabled_colors=${disabled} + ''; + xdg.configFile."qt6ct/colors/kemuri.conf".text = '' + [ColorScheme] + active_colors=${active} + inactive_colors=${inactive} + disabled_colors=${disabled} + ''; + + xdg.configFile."qt5ct/qt5ct.conf".text = '' + [Appearance] + style=Fusion + custom_palette=true + color_scheme_path=${config.xdg.configHome}/qt5ct/colors/kemuri.conf + standard_dialogs=default + + [Fonts] + fixed="${font}" + general="${font}" + ''; + xdg.configFile."qt6ct/qt6ct.conf".text = '' + [Appearance] + style=Fusion + custom_palette=true + color_scheme_path=${config.xdg.configHome}/qt6ct/colors/kemuri.conf + standard_dialogs=default + + [Fonts] + fixed="${font}" + general="${font}" ''; xdg.configFile."kdeglobals".text = '' [General] - font=JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0 - fixed=JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0 - menuFont=JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0 - toolBarFont=JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0 + font=${font} + fixed=${font} + menuFont=${font} + toolBarFont=${font} smallestReadableFont=JetBrainsMono Nerd Font,9,-1,5,50,0,0,0,0,0 ''; }; diff --git a/modules/home/niri/desktop-niri-keybinds.ulu.nix b/modules/home/niri/desktop-niri-keybinds.ulu.nix index 12d135f..e243ef9 100644 --- a/modules/home/niri/desktop-niri-keybinds.ulu.nix +++ b/modules/home/niri/desktop-niri-keybinds.ulu.nix @@ -33,7 +33,7 @@ # LAUNCHERS "Mod+Return".action.spawn = [ "ghostty" ]; "Mod+W".action.spawn = [ "helium" ]; - "Mod+E".action.spawn = [ "thunar" ]; + "Mod+E".action.spawn = [ "dolphin" ]; "Mod+Z".action.spawn = [ "code" ]; "Mod+Alt+V".action.spawn = [ "pavucontrol" ]; "Mod+Shift+V".action.spawn-sh = "noctalia msg panel-toggle clipboard"; diff --git a/modules/home/theme/home-theme-kemuri.ulu.nix b/modules/home/theme/home-theme-kemuri.ulu.nix new file mode 100644 index 0000000..4028058 --- /dev/null +++ b/modules/home/theme/home-theme-kemuri.ulu.nix @@ -0,0 +1,31 @@ +{ inputs, ... }: +{ + flake.homeModules.home-theme-kemuri = + { ... }: + { + elars.theme.palette = inputs.themes.custom { + name = "Kemuri Susu"; + author = "elars"; + + base00 = "1e1d1b"; + base01 = "282624"; + base02 = "34312d"; + base03 = "594f46"; + base04 = "73685f"; + base05 = "f0ede6"; + base06 = "cabaaa"; + base07 = "fafbfe"; + + base08 = "cf7670"; # red / mError + base09 = "d1ba94"; # orange (approximated, see note above) + base0A = "bfa67a"; # yellow + base0B = "8ca38a"; # green + base0C = "7fa39a"; # cyan + base0D = "78909c"; # blue + base0E = "b38f99"; # magenta + base0F = "594f46"; # brown / mTertiary + + accent = "cabaaa"; + }; + }; +} diff --git a/modules/home/theme/home-theme.ulu.nix b/modules/home/theme/home-theme.ulu.nix new file mode 100644 index 0000000..54ade88 --- /dev/null +++ b/modules/home/theme/home-theme.ulu.nix @@ -0,0 +1,15 @@ +{ ... }: +{ + flake.homeModules.home-theme = + { lib, ... }: + { + options.elars.theme.palette = lib.mkOption { + type = lib.types.raw; + description = '' + Active ThemeNix-shaped base16 palette. Set by exactly one + `home-theme-*` module (e.g. home-theme-kemuri); consumed by + home-gtk and home-qt. + ''; + }; + }; +} diff --git a/modules/nixos/common/common-packages.ulu.nix b/modules/nixos/common/common-packages.ulu.nix index 7778e2b..683a1c6 100644 --- a/modules/nixos/common/common-packages.ulu.nix +++ b/modules/nixos/common/common-packages.ulu.nix @@ -16,18 +16,17 @@ environment.systemPackages = with pkgs; [ # apps onlyoffice-desktopeditors + whatsapp-electron telegram-desktop - prismlauncher + prismlauncher moonlight-qt qbittorrent obs-studio localsend picotool sunshine - # todo find better spotify client - spotify - whatsie - heroic + spotify + heroic loupe gimp wine @@ -182,7 +181,6 @@ uv # editors - lite-xl neovim vscode