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