mirror of
https://github.com/js0ny/dotfiles.git
synced 2026-03-22 02:36:19 +00:00
chore: reorg
This commit is contained in:
parent
e0a023da4f
commit
1b5c26bc04
54 changed files with 411 additions and 227 deletions
|
|
@ -1,119 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
# Helper to handle the logic check string
|
||||
# 如果 force 为 true,Bash 变量 FORCE 为 "true",否则为 "false"
|
||||
# In Nix, (toString true) yields "1"
|
||||
mkForceVar = force:
|
||||
if force
|
||||
then "true"
|
||||
else "false";
|
||||
|
||||
mkMergedYaml = {
|
||||
name,
|
||||
target,
|
||||
settings,
|
||||
force ? false,
|
||||
}: let
|
||||
yamlContent = lib.generators.toYAML {} settings;
|
||||
patchFile = "${target}.nix-managed";
|
||||
in {
|
||||
home.file."${patchFile}".text = yamlContent;
|
||||
|
||||
home.activation."merge-${name}" = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||
TARGET="$HOME/${target}"
|
||||
PATCH="$HOME/${patchFile}"
|
||||
FORCE="${mkForceVar force}"
|
||||
|
||||
if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then
|
||||
if [ -f "$PATCH" ]; then
|
||||
verboseEcho "Merging Nix managed YAML config into: $TARGET"
|
||||
|
||||
# 只有在确定要操作时,才创建目录和空文件
|
||||
run mkdir -p "$(dirname "$TARGET")"
|
||||
|
||||
if [ ! -f "$TARGET" ]; then
|
||||
echo "{}" > "$TARGET"
|
||||
fi
|
||||
|
||||
run ${pkgs.yq-go}/bin/yq -i -oy -P ". *= load(\"$PATCH\")" "$TARGET"
|
||||
fi
|
||||
else
|
||||
verboseEcho "Skipping merge for $TARGET: file missing and force=false"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
mkMergedJson = {
|
||||
name,
|
||||
target,
|
||||
settings,
|
||||
force ? false,
|
||||
}: 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}"
|
||||
FORCE="${mkForceVar force}"
|
||||
|
||||
if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then
|
||||
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
|
||||
else
|
||||
verboseEcho "Skipping merge for $TARGET: file missing and force=false"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
mkMergedIni = {
|
||||
name,
|
||||
target,
|
||||
settings,
|
||||
force ? false,
|
||||
}: 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}"
|
||||
FORCE="${mkForceVar force}"
|
||||
|
||||
if [ -f "$TARGET" ] || [ "$FORCE" = "true" ]; then
|
||||
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
|
||||
else
|
||||
verboseEcho "Skipping merge for $TARGET: file missing and force=false"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
in {
|
||||
inherit mkMergedYaml mkMergedJson mkMergedIni;
|
||||
}
|
||||
|
|
@ -73,6 +73,8 @@
|
|||
visidata
|
||||
proton-pass-cli
|
||||
pass
|
||||
# rar: Unfree, the only way (afaik) to unarchive some very old partition rars
|
||||
rar
|
||||
]
|
||||
++ (
|
||||
if pkgs.stdenv.isDarwin
|
||||
|
|
|
|||
|
|
@ -28,6 +28,6 @@
|
|||
systemd.user.tmpfiles.rules = [
|
||||
"d ${config.xdg.dataHome}/cargo 0755 ${config.home.username} users -"
|
||||
"d ${config.xdg.dataHome}/go 0755 ${config.home.username} users -"
|
||||
"f ${config.xdg.stateHome}/python 0755 ${config.home.username} users -"
|
||||
"d ${config.xdg.stateHome}/python 0755 ${config.home.username} users -"
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@
|
|||
...
|
||||
}: let
|
||||
noname = pkgs.callPackage ../../../pkgs/noname/default.nix {};
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools = import ../../../modules/lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mkMergedJson = mergetools.mkMergedJson;
|
||||
mkMergedIni = mergetools.mkMergedIni;
|
||||
pdxrel = ".local/share/Paradox Interactive";
|
||||
pdxrel = "${config.home.homeDirectory}/.local/share/Paradox Interactive";
|
||||
# pdxbase = "${config.home.homeDirectory}/${pdxrel}";
|
||||
euvbase = "${config.home.homeDirectory}/.local/share/Steam/steamapps/compatdata/3450310/pfx/drive_c/users/steamuser/Documents/Paradox Interactive/Europa Universalis V";
|
||||
paradoxLauncherUserSettings = mkMergedJson {
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
# 经典 $HOME 下拉屎
|
||||
pdxSdkSettingsV3 = mkMergedJson {
|
||||
name = "pdxSdkaccountJsonV3";
|
||||
target = "PDX/SDK/victoria3/account.json";
|
||||
target = "${config.home.homeDirectory}/PDX/SDK/victoria3/account.json";
|
||||
settings = {
|
||||
telemetryEnabled = false;
|
||||
};
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
};
|
||||
pdxSdkTelemetryV3 = mkMergedJson {
|
||||
name = "pdxSdktelemetryConsentV3";
|
||||
target = "PDX/SDK/victoria3/telemetry_consent.json";
|
||||
target = "${config.home.homeDirectory}/PDX/SDK/victoria3/telemetry_consent.json";
|
||||
settings = {
|
||||
telemetry_consent_choice = "denied";
|
||||
};
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
};
|
||||
prismLauncherCfg = mkMergedIni {
|
||||
name = "prism-launcher-config";
|
||||
target = ".local/share/PrismLauncher/prismlauncher.cfg";
|
||||
target = "${config.home.homeDirectory}/.local/share/PrismLauncher/prismlauncher.cfg";
|
||||
settings = {
|
||||
General = {
|
||||
Language = "zh";
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
};
|
||||
ryujinxConfig = mkMergedJson {
|
||||
name = "ryujinx-config";
|
||||
target = ".config/Ryujinx/Config.json";
|
||||
target = "${config.home.homeDirectory}/.config/Ryujinx/Config.json";
|
||||
settings = {
|
||||
game_dir = [
|
||||
"${config.home.homeDirectory}/Games/ROM/Nintendo - Nintendo Switch"
|
||||
|
|
|
|||
|
|
@ -117,6 +117,8 @@ in {
|
|||
readest
|
||||
openclaw
|
||||
|
||||
kid3
|
||||
|
||||
# Use Wayland for Jetbrains
|
||||
# (jetbrains.idea-ultimate.override {
|
||||
# vmopts = ''-Dawt.toolkit.name=WLToolkit'';
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
config,
|
||||
...
|
||||
}: let
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools = import ../../../modules/lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mkMergedJson = mergetools.mkMergedJson;
|
||||
cherryStudioConfig = mkMergedJson {
|
||||
name = "cherry-studio-config";
|
||||
target = ".config/cherry-studio/config.json";
|
||||
target = "${config.home.homeDirectory}/.config/cherry-studio/config.json";
|
||||
settings = {
|
||||
enableDeveloperMode = true;
|
||||
enableDataCollection = false;
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
config,
|
||||
...
|
||||
}: let
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools = import ../../../modules/lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mkMergeIni = mergetools.mkMergedIni;
|
||||
# username = config.home.username;
|
||||
fsearchConf = mkMergeIni {
|
||||
name = "fsearch-conf";
|
||||
target = ".config/fsearch/fsearch.conf";
|
||||
target = "${config.home.homeDirectory}/.config/fsearch/fsearch.conf";
|
||||
settings = {
|
||||
Interface = {
|
||||
single_click_open = false;
|
||||
|
|
|
|||
|
|
@ -22,8 +22,31 @@
|
|||
fi
|
||||
'';
|
||||
};
|
||||
ii-fzf = pkgs.writeShellApplication {
|
||||
name = "ii-fzf";
|
||||
runtimeInputs = with pkgs; [fzf];
|
||||
text = ''
|
||||
_file=""
|
||||
|
||||
if command -v fd >/dev/null 2>&1; then
|
||||
_file=$(fd --type f --exclude '*.lock' | fzf --height 40% --reverse -1 -q "''${1:-}")
|
||||
else
|
||||
# Fallback to 'find'
|
||||
_file=$(find . -type f ! -name '*.lock' | fzf --height 40% --reverse -1 -q "''${1:-}")
|
||||
fi
|
||||
|
||||
# In POSIX shell, if fzf is cancelled (Esc/Ctrl-C),
|
||||
# the command substitution simply returns an empty string.
|
||||
# So, we check if the variable '_file' is non-empty ('-n').
|
||||
if [ -n "$_file" ]; then
|
||||
xdg-open "$_file"
|
||||
else
|
||||
echo "No file selected."
|
||||
fi
|
||||
'';
|
||||
};
|
||||
in {
|
||||
home.packages = [edit-fzf];
|
||||
home.packages = [edit-fzf ii-fzf];
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
|
|
|
|||
|
|
@ -17,11 +17,13 @@
|
|||
echo "marketplaceID: 12" >> "$out/theme.yml"
|
||||
echo 'version: "25.02"' >> "$out/theme.yml"
|
||||
'';
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools =
|
||||
import ../../../../../modules/lib/mergetools.nix
|
||||
{inherit pkgs lib config;};
|
||||
mkMergedYaml = mergetools.mkMergedYaml;
|
||||
ciderSpaConfig = mkMergedYaml {
|
||||
name = "cider-spa-config";
|
||||
target = ".config/sh.cider.genten/spa-config.yml";
|
||||
target = "${config.home.homeDirectory}/.config/sh.cider.genten/spa-config.yml";
|
||||
settings = {
|
||||
general = {
|
||||
language = "zh-CN";
|
||||
|
|
@ -35,8 +37,8 @@
|
|||
appearance = "auto";
|
||||
# default: Mojave
|
||||
useAdaptiveColors = true;
|
||||
# TODO: Change to "native" when using simple WM
|
||||
# Electron does not render the three buttons in title bar when "native"
|
||||
# NOTE: "native" breaks window controls on tiling WMs (Electron bug).
|
||||
# "default" works on both GNOME and Niri, so keep it.
|
||||
titleBarStyle = "default";
|
||||
layoutType = "default";
|
||||
fonts = {
|
||||
|
|
@ -81,7 +83,7 @@
|
|||
};
|
||||
in {
|
||||
imports = [
|
||||
../../../modules/home/programs/cider-2.nix
|
||||
./lib.nix
|
||||
ciderSpaConfig
|
||||
];
|
||||
|
||||
122
nixcfgs/users/js0ny/programs/media/cider-2/lib.nix
Normal file
122
nixcfgs/users/js0ny/programs/media/cider-2/lib.nix
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.programs.cider-2;
|
||||
ciderConfigDir = "sh.cider.genten";
|
||||
|
||||
# --- 1. 辅助函数:Cider Marketplace Fetcher ---
|
||||
fetchCiderMarketplace = {
|
||||
projectId,
|
||||
version,
|
||||
sha256,
|
||||
}:
|
||||
pkgs.runCommand "cider-extension-${toString projectId}" {
|
||||
nativeBuildInputs = [pkgs.unzip];
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://api.connect.cider.sh/marketplace/projects/${toString projectId}/versions/${version}/download";
|
||||
inherit sha256;
|
||||
};
|
||||
} ''
|
||||
mkdir -p $out
|
||||
unzip $src -d $out
|
||||
'';
|
||||
|
||||
# --- 2. 类型定义:Entry Submodule ---
|
||||
# 这个 submodule 定义了单一 Theme 或 Plugin 的配置结构
|
||||
entryType = types.submodule ({
|
||||
name,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
options = {
|
||||
src = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = "Direct path or derivation to the theme/plugin directory.";
|
||||
};
|
||||
|
||||
marketplace = mkOption {
|
||||
default = null;
|
||||
description = "Download from Cider Marketplace.";
|
||||
type = types.nullOr (types.submodule {
|
||||
options = {
|
||||
id = mkOption {
|
||||
type = types.int;
|
||||
description = "Project ID (e.g. 10)";
|
||||
};
|
||||
version = mkOption {
|
||||
type = types.str;
|
||||
description = "Version string (e.g. 1.1.0)";
|
||||
};
|
||||
sha256 = mkOption {
|
||||
type = types.str;
|
||||
description = "SRI Hash or SHA256";
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
# --- 3. 逻辑转换函数 ---
|
||||
# 将用户的 submodule 配置转换为最终的 store path
|
||||
resolveEntry = name: entryCfg:
|
||||
if entryCfg.src != null
|
||||
then entryCfg.src
|
||||
else if entryCfg.marketplace != null
|
||||
then
|
||||
fetchCiderMarketplace {
|
||||
projectId = entryCfg.marketplace.id;
|
||||
inherit (entryCfg.marketplace) version sha256;
|
||||
}
|
||||
else throw "programs.cider-2: Theme/Plugin '${name}' must have either 'src' or 'marketplace' defined.";
|
||||
in {
|
||||
# --- Options 定义 ---
|
||||
options.programs.cider-2 = {
|
||||
enable = mkEnableOption "Cider 2";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.cider-2;
|
||||
defaultText = literalExpression "pkgs.cider-2";
|
||||
};
|
||||
|
||||
themes = mkOption {
|
||||
# Key 是目录名 (对于 Marketplace theme 通常是 ID,如 "12")
|
||||
type = types.attrsOf entryType;
|
||||
default = {};
|
||||
description = "Themes configuration.";
|
||||
};
|
||||
|
||||
plugins = mkOption {
|
||||
# Key 是 literalId (如 "ch.kaifa.listenbrainz")
|
||||
type = types.attrsOf entryType;
|
||||
default = {};
|
||||
description = "Plugins configuration.";
|
||||
};
|
||||
};
|
||||
|
||||
# --- Config 实现 ---
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [cfg.package];
|
||||
|
||||
xdg.configFile = let
|
||||
# 生成 Theme 路径: .../themes/<Key>
|
||||
mkTheme = name: entry:
|
||||
nameValuePair
|
||||
"${ciderConfigDir}/themes/${name}"
|
||||
{source = resolveEntry name entry;};
|
||||
|
||||
# 生成 Plugin 路径: .../plugins/<Key (LiteralID)>
|
||||
mkPlugin = name: entry:
|
||||
nameValuePair
|
||||
"${ciderConfigDir}/plugins/${name}"
|
||||
{source = resolveEntry name entry;};
|
||||
in
|
||||
(mapAttrs' mkTheme cfg.themes) // (mapAttrs' mkPlugin cfg.plugins);
|
||||
};
|
||||
}
|
||||
|
|
@ -4,11 +4,11 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools = import ../../../../modules/lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mkMergeIni = mergetools.mkMergedIni;
|
||||
elisarc = mkMergeIni {
|
||||
name = "elisarc";
|
||||
target = ".config/elisarc";
|
||||
target = "${config.home.homeDirectory}/.config/elisarc";
|
||||
settings = {
|
||||
ElisaFileIndexer = {
|
||||
"RootPath[$e]" = "$HOME/Music";
|
||||
|
|
@ -4,11 +4,11 @@
|
|||
config,
|
||||
...
|
||||
}: let
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools = import ../../../../modules/lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mkMergedJson = mergetools.mkMergedJson;
|
||||
feishinConfig = mkMergedJson {
|
||||
name = "feishin-config";
|
||||
target = ".config/feishin/config.json";
|
||||
target = "${config.home.homeDirectory}/.config/feishin/config.json";
|
||||
settings = {
|
||||
theme = "system";
|
||||
window_has_frame = false;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
exit 1
|
||||
}
|
||||
|
||||
# TODO: Add tag search support
|
||||
# DEPRECATED: Consider removing in favour of Obsidian's official CLI.
|
||||
rg --line-number --color=always "" |
|
||||
fzf --ansi \
|
||||
--delimiter : \
|
||||
|
|
@ -4,11 +4,11 @@
|
|||
config,
|
||||
...
|
||||
}: let
|
||||
mergetools = import ../lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mergetools = import ../../../../modules/lib/mergetools.nix {inherit pkgs lib config;};
|
||||
mkMergedJson = mergetools.mkMergedJson;
|
||||
readestSettings = mkMergedJson {
|
||||
name = "readest-settings";
|
||||
target = ".config/com.bilingify.readest/settings.json";
|
||||
target = "${config.home.homeDirectory}/.config/com.bilingify.readest/settings.json";
|
||||
settings = {
|
||||
globalViewSettings = {
|
||||
serifFont = "LXGW WenKai GB Screen";
|
||||
|
|
@ -15,24 +15,24 @@
|
|||
|
||||
# Programs
|
||||
./programs/aichat.nix
|
||||
./programs/firefox
|
||||
./programs/emacs.nix
|
||||
./programs/zed-editor.nix
|
||||
./programs/browsers/firefox
|
||||
./programs/editors/emacs.nix
|
||||
./programs/editors/zed-editor.nix
|
||||
./programs/rime
|
||||
./programs/sdcv.nix
|
||||
./programs/productivity/sdcv.nix
|
||||
./programs/fzf.nix
|
||||
./programs/sops.nix
|
||||
./programs/nvim.nix
|
||||
./programs/editors/nvim.nix
|
||||
./programs/pdf2zh/uv.nix
|
||||
./programs/yazi.nix
|
||||
./programs/edit-clipboard.nix
|
||||
./programs/neovide.nix
|
||||
./programs/ghostty.nix
|
||||
./programs/tmux.nix
|
||||
./programs/kitty.nix
|
||||
./programs/anki.nix
|
||||
./programs/sioyek
|
||||
./programs/telegram.nix
|
||||
./programs/editors/neovide.nix
|
||||
./programs/terminals/ghostty.nix
|
||||
./programs/terminals/tmux.nix
|
||||
./programs/terminals/kitty.nix
|
||||
./programs/productivity/anki.nix
|
||||
./programs/productivity/sioyek
|
||||
./programs/social/telegram.nix
|
||||
# ./programs/retroarch.nix # Package broken on macOS
|
||||
./programs/darwin/duti.nix
|
||||
./programs/darwin/alt-tab.nix
|
||||
|
|
|
|||
|
|
@ -32,19 +32,51 @@ in {
|
|||
./programs/shell/carapace.nix
|
||||
./programs/shell/direnv.nix
|
||||
|
||||
# Personal Program
|
||||
./programs/chromium.nix
|
||||
./programs/firefox
|
||||
./programs/emacs.nix
|
||||
./programs/vscode.nix
|
||||
# Browsers
|
||||
./programs/browsers/chromium.nix
|
||||
./programs/browsers/firefox
|
||||
|
||||
# Editors
|
||||
./programs/editors/emacs.nix
|
||||
./programs/editors/nvim.nix
|
||||
./programs/editors/neovide.nix
|
||||
./programs/editors/vscode.nix
|
||||
./programs/editors/zed-editor.nix
|
||||
|
||||
# Terminals
|
||||
./programs/terminals/ghostty.nix
|
||||
./programs/terminals/kitty.nix
|
||||
./programs/terminals/tmux.nix
|
||||
|
||||
# Media
|
||||
./programs/media/cider-2
|
||||
./programs/media/celluloid.nix
|
||||
./programs/media/elisa.nix
|
||||
./programs/media/feishin.nix
|
||||
./programs/media/gallery-dl.nix
|
||||
./programs/media/lollypop.nix
|
||||
./programs/media/mpv.nix
|
||||
./programs/media/obs-studio.nix
|
||||
./programs/media/picard.nix
|
||||
|
||||
# Productivity
|
||||
./programs/productivity/anki.nix
|
||||
./programs/productivity/libreoffice.nix
|
||||
./programs/productivity/obsidian
|
||||
./programs/productivity/readest.nix
|
||||
./programs/productivity/sdcv.nix
|
||||
./programs/productivity/sioyek
|
||||
./programs/productivity/thunderbird.nix
|
||||
|
||||
# Social
|
||||
./programs/social/discord.nix
|
||||
./programs/social/telegram.nix
|
||||
|
||||
# Utilities & misc
|
||||
# ./programs/xilinx.nix
|
||||
./programs/mime.nix
|
||||
./programs/zed-editor.nix
|
||||
./programs/rime
|
||||
./programs/sdcv.nix
|
||||
./programs/fzf.nix
|
||||
./programs/libreoffice.nix
|
||||
./programs/nvim.nix
|
||||
./programs/ollama.nix
|
||||
./programs/sops.nix
|
||||
./programs/pdf2zh/container.nix
|
||||
|
|
@ -54,34 +86,14 @@ in {
|
|||
./programs/magick.nix
|
||||
./programs/miniserve.nix
|
||||
./programs/retroarch.nix
|
||||
./programs/neovide.nix
|
||||
./programs/edit-clipboard.nix
|
||||
./programs/discord.nix
|
||||
./programs/mpv.nix
|
||||
./programs/thunderbird.nix
|
||||
./programs/obs-studio.nix
|
||||
./programs/ghostty.nix
|
||||
./programs/obsidian
|
||||
./programs/aichat.nix
|
||||
./programs/tmux.nix
|
||||
./programs/kitty.nix
|
||||
./programs/wine.nix
|
||||
./programs/anki.nix
|
||||
./programs/libvirt.nix
|
||||
./programs/block-desktop-entries.nix
|
||||
./programs/pwa.nix
|
||||
./programs/walker.nix
|
||||
./programs/sioyek
|
||||
./programs/celluloid.nix
|
||||
./programs/picard.nix
|
||||
./programs/cider-2.nix
|
||||
./programs/telegram.nix
|
||||
./programs/feishin.nix
|
||||
./programs/fsearch.nix
|
||||
./programs/elisa.nix
|
||||
./programs/lollypop.nix
|
||||
./programs/gallery-dl.nix
|
||||
./programs/readest.nix
|
||||
# ./programs/openclaw.nix
|
||||
./programs/libmagic.nix
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue