diff --git a/nixcfgs/flake.nix b/nixcfgs/flake.nix index f87b8d9..a4a669a 100644 --- a/nixcfgs/flake.nix +++ b/nixcfgs/flake.nix @@ -104,8 +104,6 @@ nixosHosts = [ "zp" "zephyrus" - "nixvirt" - "polder" ]; darwinHosts = [ "zen" diff --git a/nixcfgs/modules/nixos/desktop/de/gnome.nix b/nixcfgs/modules/nixos/desktop/de/gnome.nix index 062b689..84285a1 100644 --- a/nixcfgs/modules/nixos/desktop/de/gnome.nix +++ b/nixcfgs/modules/nixos/desktop/de/gnome.nix @@ -22,5 +22,6 @@ baobab # Disk Usage Analyzer, use dust instead epiphany # GNOME Web gnome-system-monitor # use mission-center + gnome-terminal ]; } diff --git a/nixcfgs/users/js0ny/lib/mergetools.nix b/nixcfgs/users/js0ny/lib/mergetools.nix index 3d69bde..0fc9e59 100644 --- a/nixcfgs/users/js0ny/lib/mergetools.nix +++ b/nixcfgs/users/js0ny/lib/mergetools.nix @@ -39,6 +39,59 @@ 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 { - inherit mkMergedYaml; + inherit mkMergedYaml mkMergedJson mkMergedIni; } diff --git a/nixcfgs/users/js0ny/packages/gui.nix b/nixcfgs/users/js0ny/packages/gui.nix index 9a9fef2..4814dec 100644 --- a/nixcfgs/users/js0ny/packages/gui.nix +++ b/nixcfgs/users/js0ny/packages/gui.nix @@ -118,6 +118,7 @@ in { mission-center calibre dconf-editor + fsearch # Everything-like search tool ] ++ (mkFcitxIM [ pkgs.neovim-qt diff --git a/nixcfgs/users/js0ny/packages/stylix.nix b/nixcfgs/users/js0ny/packages/stylix.nix index d157762..eab052c 100644 --- a/nixcfgs/users/js0ny/packages/stylix.nix +++ b/nixcfgs/users/js0ny/packages/stylix.nix @@ -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; - polarity = "dark"; + polarity = "light"; }; } diff --git a/nixcfgs/users/js0ny/programs/desktop/gnome/default.nix b/nixcfgs/users/js0ny/programs/desktop/gnome/default.nix index 029fd8e..99089f6 100644 --- a/nixcfgs/users/js0ny/programs/desktop/gnome/default.nix +++ b/nixcfgs/users/js0ny/programs/desktop/gnome/default.nix @@ -22,6 +22,7 @@ in { [ gnome-tweaks sushi + nautilus-open-any-terminal ] ++ extensions; programs.gnome-shell.enable = true; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix index 2bf8e7e..fc1c030 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/keymaps.nix @@ -21,22 +21,24 @@ in { "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".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".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "CherryStudio" "cherry-studio"; "Mod+O".hotkey-overlay.title = "Focus or launch Obsidian"; "Mod+O".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "obsidian" "obsidian"; # 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 - "Mod+E".hotkey-overlay.title = "Focus or launch file explorer"; - "Mod+E".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "org.kde.dolphin" "dolphin"; - "Mod+Alt+Return".action = spawn-sh "${term} --class=kitty-terminal-popup"; - "Mod+Shift+Alt+Return".action = spawn-sh "${term} --class=kitty--terminal-popup --working-directory='${config.home.homeDirectory}/.config/shells/nohist' -e nix develop"; + "Mod+E".hotkey-overlay.title = "Launch file explorer"; + # "Mod+E".action = spawn "${lib.getExe nirictl.focusOrLaunch}" "org.kde.dolphin" "dolphin"; + "Mod+E".action = spawn-sh "xdg-open ~"; + "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 = - 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; diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/window-rules.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/window-rules.nix index d7ca4e7..f16fc4a 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/window-rules.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/niri/window-rules.nix @@ -7,11 +7,27 @@ { app-id = "^.*terminal-popup$"; } + { + app-id = "^fsearch$"; + } ]; open-floating = true; 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 { matches = [ diff --git a/nixcfgs/users/js0ny/programs/feishin.nix b/nixcfgs/users/js0ny/programs/feishin.nix new file mode 100644 index 0000000..48e7a71 --- /dev/null +++ b/nixcfgs/users/js0ny/programs/feishin.nix @@ -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 + ]; +} diff --git a/nixcfgs/users/js0ny/programs/firefox/default.nix b/nixcfgs/users/js0ny/programs/firefox/default.nix index cabb7d1..a0e4357 100644 --- a/nixcfgs/users/js0ny/programs/firefox/default.nix +++ b/nixcfgs/users/js0ny/programs/firefox/default.nix @@ -33,6 +33,18 @@ # * 3: Restore Previous Session "browser.startup.page" = 3; "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"; }; }; }; diff --git a/nixcfgs/users/js0ny/programs/fsearch.nix b/nixcfgs/users/js0ny/programs/fsearch.nix new file mode 100644 index 0000000..24deafc --- /dev/null +++ b/nixcfgs/users/js0ny/programs/fsearch.nix @@ -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 + ]; +} diff --git a/nixcfgs/users/js0ny/programs/mime.nix b/nixcfgs/users/js0ny/programs/mime.nix index 3b73500..3aa44f6 100644 --- a/nixcfgs/users/js0ny/programs/mime.nix +++ b/nixcfgs/users/js0ny/programs/mime.nix @@ -74,7 +74,8 @@ in { mkAssoc "sioyek.desktop;org.kde.okular;" ["application/pdf"] // 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 "onlyoffice-desktopeditors.desktop" [ diff --git a/nixcfgs/users/js0ny/programs/telegram.nix b/nixcfgs/users/js0ny/programs/telegram.nix index bb52f0f..e81dff1 100644 --- a/nixcfgs/users/js0ny/programs/telegram.nix +++ b/nixcfgs/users/js0ny/programs/telegram.nix @@ -3,86 +3,90 @@ lib, ... }: let + mod = + if pkgs.stdenv.isDarwin + then "meta" + else "alt"; shortcuts = builtins.toJSON [ { command = "previous_chat"; - keys = "alt+k"; + keys = "${mod}+k"; } { command = "next_chat"; - keys = "alt+j"; + keys = "${mod}+j"; } { command = "self_chat"; - keys = "alt+0"; + keys = "${mod}+0"; } { command = "pinned_chat1"; - keys = "alt+1"; + keys = "${mod}+1"; } { command = "all_chats"; - keys = "alt+1"; + keys = "${mod}+1"; } { command = "pinned_chat2"; - keys = "alt+2"; + keys = "${mod}+2"; } { command = "folder1"; - keys = "alt+2"; + keys = "${mod}+2"; } { command = "pinned_chat3"; - keys = "alt+3"; + keys = "${mod}+3"; } { command = "folder2"; - keys = "alt+3"; + keys = "${mod}+3"; } { command = "pinned_chat4"; - keys = "alt+4"; + keys = "${mod}+4"; } { command = "folder3"; - keys = "alt+4"; + keys = "${mod}+4"; } { command = "pinned_chat5"; - keys = "alt+5"; + keys = "${mod}+5"; } { command = "folder4"; - keys = "alt+5"; + keys = "${mod}+5"; } { command = "pinned_chat6"; - keys = "alt+6"; + keys = "${mod}+6"; } { command = "folder5"; - keys = "alt+6"; + keys = "${mod}+6"; } { command = "pinned_chat7"; - keys = "alt+7"; + keys = "${mod}+7"; } { command = "folder6"; - keys = "alt+7"; + keys = "${mod}+7"; } { command = "pinned_chat8"; - keys = "alt+8"; + keys = "${mod}+8"; } { command = "last_folder"; - keys = "alt+8"; + keys = "${mod}+8"; } { command = "show_archive"; - keys = "alt+9"; + keys = "${mod}+9"; } ]; in { @@ -95,4 +99,10 @@ in { "materialgram/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 {}; } diff --git a/nixcfgs/users/js0ny/zephyrus.nix b/nixcfgs/users/js0ny/zephyrus.nix index 3da14c8..b12a10d 100644 --- a/nixcfgs/users/js0ny/zephyrus.nix +++ b/nixcfgs/users/js0ny/zephyrus.nix @@ -77,6 +77,8 @@ in { ./programs/picard.nix ./programs/cider-2.nix ./programs/telegram.nix + ./programs/feishin.nix + ./programs/fsearch.nix # Desktop Linux ./programs/desktop/gnome