feishin, fsearch, mkMergedIni

This commit is contained in:
js0ny 2025-12-17 20:44:55 +00:00
parent a799c465db
commit 5386c02b23
14 changed files with 213 additions and 34 deletions

View file

@ -104,8 +104,6 @@
nixosHosts = [ nixosHosts = [
"zp" "zp"
"zephyrus" "zephyrus"
"nixvirt"
"polder"
]; ];
darwinHosts = [ darwinHosts = [
"zen" "zen"

View file

@ -22,5 +22,6 @@
baobab # Disk Usage Analyzer, use dust instead baobab # Disk Usage Analyzer, use dust instead
epiphany # GNOME Web epiphany # GNOME Web
gnome-system-monitor # use mission-center gnome-system-monitor # use mission-center
gnome-terminal
]; ];
} }

View file

@ -39,6 +39,59 @@
fi fi
''; '';
}; };
mkMergedJson = {
name,
target,
settings,
}: let
jsonContent = builtins.toJSON settings;
patchFile = "${target}.nix-managed";
in {
home.file."${patchFile}".text = jsonContent;
home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] ''
TARGET="$HOME/${target}"
PATCH="$HOME/${patchFile}"
if [ -f "$PATCH" ]; then
verboseEcho "Merging Nix managed JSON config into: $TARGET"
run mkdir -p "$(dirname "$TARGET")"
if [ ! -f "$TARGET" ]; then
echo "{}" > "$TARGET"
fi
run ${pkgs.yq-go}/bin/yq -i -o json -P --indent 2 ". *= load(\"$PATCH\")" "$TARGET"
fi
'';
};
mkMergedIni = {
name,
target,
settings,
}: let
iniContent = lib.generators.toINI {} settings;
patchFile = "${target}.nix-managed";
in {
home.file."${patchFile}".text = iniContent;
home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] ''
TARGET="$HOME/${target}"
PATCH="$HOME/${patchFile}"
if [ -f "$PATCH" ]; then
verboseEcho "Merging Nix managed INI config into: $TARGET"
run mkdir -p "$(dirname "$TARGET")"
if [ ! -f "$TARGET" ]; then
echo "" > "$TARGET"
fi
run ${pkgs.crudini}/bin/crudini --merge "$TARGET" < "$PATCH"
fi
'';
};
in { in {
inherit mkMergedYaml; inherit mkMergedYaml mkMergedJson mkMergedIni;
} }

View file

@ -118,6 +118,7 @@ in {
mission-center mission-center
calibre calibre
dconf-editor dconf-editor
fsearch # Everything-like search tool
] ]
++ (mkFcitxIM [ ++ (mkFcitxIM [
pkgs.neovim-qt pkgs.neovim-qt

View file

@ -71,8 +71,8 @@ in {
}; };
}; };
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-soft.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-light-medium.yaml";
image = ./wallpaper.jpg; image = ./wallpaper.jpg;
polarity = "dark"; polarity = "light";
}; };
} }

View file

@ -22,6 +22,7 @@ in {
[ [
gnome-tweaks gnome-tweaks
sushi sushi
nautilus-open-any-terminal
] ]
++ extensions; ++ extensions;
programs.gnome-shell.enable = true; programs.gnome-shell.enable = true;

View file

@ -21,22 +21,24 @@ in {
"Mod+B".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "firefox" "firefox"; "Mod+B".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "firefox" "firefox";
"Mod+Shift+B".hotkey-overlay.title = "Launch web browser in private mode"; "Mod+Shift+B".hotkey-overlay.title = "Launch web browser in private mode";
"Mod+Shift+B".action = spawn "firefox" "--private-window"; "Mod+Shift+B".action = spawn "firefox" "--private-window";
"Mod+A".action = spawn-sh "${term} --class=kitty-terminal-popup -e aichat --session"; "Mod+A".action = spawn-sh "${term} --class=terminal-popup -e aichat --session";
"Mod+Shift+A".hotkey-overlay.title = "Focus or launch CherryStudio (AI assistant)"; "Mod+Shift+A".hotkey-overlay.title = "Focus or launch CherryStudio (AI assistant)";
"Mod+Shift+A".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "CherryStudio" "cherry-studio"; "Mod+Shift+A".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "CherryStudio" "cherry-studio";
"Mod+O".hotkey-overlay.title = "Focus or launch Obsidian"; "Mod+O".hotkey-overlay.title = "Focus or launch Obsidian";
"Mod+O".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "obsidian" "obsidian"; "Mod+O".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "obsidian" "obsidian";
# See: programs/obsidian/obsidian-grep.nix # See: programs/obsidian/obsidian-grep.nix
"Mod+Shift+O".action = spawn-sh "${term} --class=kitty-terminal-popup -e obsidian-grep && ${lib.getExe nirictl.focusOrLaunch} obsidian obsidian"; "Mod+Shift+O".action = spawn-sh "${term} --app-id=terminal-popup -e obsidian-grep && ${lib.getExe nirictl.focusOrLaunch} obsidian obsidian";
# TODO: Change "org.kde.dolphin" to a more generic explorer app id via config.currentUser # TODO: Change "org.kde.dolphin" to a more generic explorer app id via config.currentUser
"Mod+E".hotkey-overlay.title = "Focus or launch file explorer"; "Mod+E".hotkey-overlay.title = "Launch file explorer";
"Mod+E".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "org.kde.dolphin" "dolphin"; # "Mod+E".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "org.kde.dolphin" "dolphin";
"Mod+Alt+Return".action = spawn-sh "${term} --class=kitty-terminal-popup"; "Mod+E".action = spawn-sh "xdg-open ~";
"Mod+Shift+Alt+Return".action = spawn-sh "${term} --class=kitty--terminal-popup --working-directory='${config.home.homeDirectory}/.config/shells/nohist' -e nix develop"; "Mod+Shift+E".action = spawn "fsearch";
"Mod+Shift+Return".action = spawn-sh "${term} --app-id=terminal-popup";
# "Mod+Shift+Alt+Return".action = spawn-sh "${term} --app-id=kitty--terminal-popup --working-directory='${config.home.homeDirectory}/.config/shells/nohist' -e nix develop";
"Mod+Shift+Return".action = spawn "neovide" "${config.home.homeDirectory}/Atelier"; "Mod+Alt+Return".action = spawn "neovide" "${config.home.homeDirectory}/Atelier";
"Mod+Apostrophe".action = "Mod+Apostrophe".action =
spawn-sh "EDITOR_MINIMAL=1 ${term} -o close_on_child_death=yes --class=kitty-terminal-popup -e edit-clipboard --minimal"; spawn-sh "EDITOR_MINIMAL=1 ${term} -o close_on_child_death=yes --app-id=terminal-popup -e edit-clipboard --minimal";
"Mod+Shift+Slash".action = show-hotkey-overlay; "Mod+Shift+Slash".action = show-hotkey-overlay;

View file

@ -7,11 +7,27 @@
{ {
app-id = "^.*terminal-popup$"; app-id = "^.*terminal-popup$";
} }
{
app-id = "^fsearch$";
}
]; ];
open-floating = true; open-floating = true;
opacity = 0.8; opacity = 0.8;
} }
{
matches = [
{
app-id = "^org.gnome.NautilusPreviewer$";
}
{
app-id = "^org.gnome.Nautilus$";
title = "^Select Document$";
}
];
open-floating = true;
}
# {{{ float, opacity 0.8, top right: Picture-in-Picture // waybar childs # {{{ float, opacity 0.8, top right: Picture-in-Picture // waybar childs
{ {
matches = [ matches = [

View file

@ -0,0 +1,28 @@
{
pkgs,
lib,
config,
...
}: let
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
mkMergedJson = mergetools.mkMergedJson;
feishinConfig = mkMergedJson {
name = "feishin-config";
target = ".config/feishin/config.json";
settings = {
theme = "system";
window_has_frame = false;
release_channel = "latest";
global_media_hotkeys = true;
window_window_bar_style = "windows";
disable_auto_updates = true;
};
};
in {
home.packages = [
pkgs.feishin
];
imports = [
feishinConfig
];
}

View file

@ -33,6 +33,18 @@
# * 3: Restore Previous Session # * 3: Restore Previous Session
"browser.startup.page" = 3; "browser.startup.page" = 3;
"browser.sessionstore.resume_from_crash" = true; "browser.sessionstore.resume_from_crash" = true;
### Sync
"services.sync.declinedEngines" = "creditcards,passwords,addresses,prefs,addons";
"services.sync.engine.addons" = false;
"services.sync.engine.addresses" = false;
"services.sync.engine.bookmarks" = true;
"services.sync.engine.creditcards" = false;
"services.sync.engine.history" = true;
"services.sync.engine.passwords" = false;
"services.sync.engine.prefs" = false;
"services.sync.engine.prefs.modified" = false;
"services.sync.engine.tabs" = true;
"services.sync.engins.tabs.filteredSchemes" = "about|resource|chrome|file|blob|moz-extension|data";
}; };
}; };
}; };

View file

@ -0,0 +1,54 @@
{
pkgs,
lib,
config,
...
}: let
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
mkMergeIni = mergetools.mkMergedIni;
# username = config.home.username;
fsearchConf = mkMergeIni {
name = "fsearch-conf";
target = ".config/fsearch/fsearch.conf";
settings = {
Interface = {
single_click_open = false;
launch_desktop_files = true;
highlight_search_terms = true;
double_click_path = false;
enable_list_tooltips = true;
enable_dark_theme = true;
show_menubar = true;
show_statusbar = true;
show_filter = true;
};
Search = {
search_as_you_type = true;
auto_search_in_path = true;
hide_results_on_empty_search = true;
};
Database = {
update_database_on_launch = true;
update_database_every = false;
update_database_every_hours = 0;
update_database_every_minutes = 15;
exclude_hidden_files_and_folders = false;
follow_symbolic_links = false;
exclude_location_1 = "/proc";
exclude_location_enabled_1 = true;
exclude_location_2 = "/sys";
exclude_location_enabled_2 = true;
exclude_location_3 = "/nix";
exclude_location_enabled_3 = true;
exclude_location_4 = "/tmp";
exclude_location_enabled_4 = true;
exclude_files = ".git;.Xil;.filen_trash_local;.direnv;.devcontainer;.cache;.bin;.github;.idea*;.bak;.history;.metadata;.jj;.jobs;node_modules;.log;.gradle;.fingerprint;.filen.trash.local;.settings;.vscode;__pycache__;xwechat_files;SiYuan;.trash;.obsidian;.project;.cproject;.gitignore;*.mk;*.o;*.d;*.checksum;*.bit;top.mmi;*.elf;*.log;impl_1;*.cache;*.runs;*.sim;hw.xml;*.hw;*.ip_user_files;*.runs;vivado.jou;vivado.log;vivado*.jou;vivado*.log;utils_1";
};
};
};
in {
imports = [fsearchConf];
home.packages = with pkgs; [
fsearch
];
}

View file

@ -74,7 +74,8 @@ in {
mkAssoc "sioyek.desktop;org.kde.okular;" ["application/pdf"] mkAssoc "sioyek.desktop;org.kde.okular;" ["application/pdf"]
// mkAssoc gvim simpleText // mkAssoc gvim simpleText
// { // {
"inode/directory" = "org.kde.dolphin.desktop"; # "inode/directory" = "org.kde.dolphin.desktop";
"inode/directory" = "org.gnome.Nautilus.desktop";
} }
// mkAssoc imageViewers image // mkAssoc imageViewers image
// mkAssoc "onlyoffice-desktopeditors.desktop" [ // mkAssoc "onlyoffice-desktopeditors.desktop" [

View file

@ -3,86 +3,90 @@
lib, lib,
... ...
}: let }: let
mod =
if pkgs.stdenv.isDarwin
then "meta"
else "alt";
shortcuts = builtins.toJSON [ shortcuts = builtins.toJSON [
{ {
command = "previous_chat"; command = "previous_chat";
keys = "alt+k"; keys = "${mod}+k";
} }
{ {
command = "next_chat"; command = "next_chat";
keys = "alt+j"; keys = "${mod}+j";
} }
{ {
command = "self_chat"; command = "self_chat";
keys = "alt+0"; keys = "${mod}+0";
} }
{ {
command = "pinned_chat1"; command = "pinned_chat1";
keys = "alt+1"; keys = "${mod}+1";
} }
{ {
command = "all_chats"; command = "all_chats";
keys = "alt+1"; keys = "${mod}+1";
} }
{ {
command = "pinned_chat2"; command = "pinned_chat2";
keys = "alt+2"; keys = "${mod}+2";
} }
{ {
command = "folder1"; command = "folder1";
keys = "alt+2"; keys = "${mod}+2";
} }
{ {
command = "pinned_chat3"; command = "pinned_chat3";
keys = "alt+3"; keys = "${mod}+3";
} }
{ {
command = "folder2"; command = "folder2";
keys = "alt+3"; keys = "${mod}+3";
} }
{ {
command = "pinned_chat4"; command = "pinned_chat4";
keys = "alt+4"; keys = "${mod}+4";
} }
{ {
command = "folder3"; command = "folder3";
keys = "alt+4"; keys = "${mod}+4";
} }
{ {
command = "pinned_chat5"; command = "pinned_chat5";
keys = "alt+5"; keys = "${mod}+5";
} }
{ {
command = "folder4"; command = "folder4";
keys = "alt+5"; keys = "${mod}+5";
} }
{ {
command = "pinned_chat6"; command = "pinned_chat6";
keys = "alt+6"; keys = "${mod}+6";
} }
{ {
command = "folder5"; command = "folder5";
keys = "alt+6"; keys = "${mod}+6";
} }
{ {
command = "pinned_chat7"; command = "pinned_chat7";
keys = "alt+7"; keys = "${mod}+7";
} }
{ {
command = "folder6"; command = "folder6";
keys = "alt+7"; keys = "${mod}+7";
} }
{ {
command = "pinned_chat8"; command = "pinned_chat8";
keys = "alt+8"; keys = "${mod}+8";
} }
{ {
command = "last_folder"; command = "last_folder";
keys = "alt+8"; keys = "${mod}+8";
} }
{ {
command = "show_archive"; command = "show_archive";
keys = "alt+9"; keys = "${mod}+9";
} }
]; ];
in { in {
@ -95,4 +99,10 @@ in {
"materialgram/tdata/shortcuts-custom.json".text = shortcuts; "materialgram/tdata/shortcuts-custom.json".text = shortcuts;
"TelegramDesktop/tdata/shortcuts-custom.json".text = shortcuts; "TelegramDesktop/tdata/shortcuts-custom.json".text = shortcuts;
}; };
home.file =
if pkgs.stdenv.isDarwin
then {
"Library/Application Support/Telegram Desktop/tdata/shortcuts-custom.json".text = shortcuts;
}
else {};
} }

View file

@ -77,6 +77,8 @@ in {
./programs/picard.nix ./programs/picard.nix
./programs/cider-2.nix ./programs/cider-2.nix
./programs/telegram.nix ./programs/telegram.nix
./programs/feishin.nix
./programs/fsearch.nix
# Desktop Linux # Desktop Linux
./programs/desktop/gnome ./programs/desktop/gnome