chore: advance workstation workflow pilots

This commit is contained in:
kiri committed 2026-09-05 21:18:34 +02:00
1 parent 2c0338329b
commit c9ee688537
18 files changed
+328 -553

No files matched your search

+2
View File
@@ -132,5 +132,7 @@ in
Every action must justify its context. Minimize tools and skills; prefer targeted queries and bounded output. Ask for readily available large output instead of retrieving it.
'';
home.file.".codex/skills/nixos-maintainer/SKILL.md".source = ./skills/nixos-maintainer/SKILL.md;
};
}
+37 -2
View File
@@ -23,9 +23,17 @@
};
flake.modules.homeManager.vivaldi =
{ lib, pkgs, ... }:
{
config,
lib,
pkgs,
...
}:
let
command = lib.getExe pkgs.vivaldi;
appCommand = id: "${command} --profile-directory=Default --app-id=${id}";
actualId = "ahoihnifhakgijcmjlhbcgehigihinlo";
whatsappId = "hnpfjngllnobngcgfapefoaidbinmjnm";
in
{
desktop.commands.browser = [ command ];
@@ -33,7 +41,33 @@
packages = [ pkgs.vivaldi ];
sessionVariables.BROWSER = command;
};
xdg.mimeApps.defaultApplicationPackages = [ pkgs.vivaldi ];
xdg = {
desktopEntries = {
"vivaldi-${actualId}-Default" = {
name = "Actual";
exec = appCommand actualId;
icon = "vivaldi-${actualId}-Default";
settings.StartupWMClass = "crx_${actualId}";
actions = {
Accounts.exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/accounts";
"Add-Transaction" = {
name = "Add Transaction";
exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/transactions/new";
};
Reports.exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/reports";
};
};
"vivaldi-${whatsappId}-Default" = {
name = "WhatsApp Web";
exec = appCommand whatsappId;
icon = "vivaldi-${whatsappId}-Default";
settings.StartupWMClass = "crx_${whatsappId}";
};
};
mimeApps.defaultApplicationPackages = [ pkgs.vivaldi ];
};
};
flake.modules.homeManager.nautilus =
@@ -120,6 +154,7 @@
dbeaver-bin
onlyoffice-desktopeditors
obsidian
pinta
];
};
-2
View File
@@ -43,7 +43,6 @@
kubelogin-oidc
mongodb-compass
scc
nodejs
mariadb
just
gardenctl
@@ -57,7 +56,6 @@
programs.jujutsu.enable = true;
programs.jq.enable = true;
programs.bun.enable = true;
programs.ripgrep.enable = true;
programs.k9s.enable = true;
-170
View File
@@ -1,170 +0,0 @@
{ config, inputs, ... }:
let
homeModules = config.flake.modules.homeManager;
in
{
flake.modules.nixos.helix-cache = {
nix.settings = {
extra-substituters = [ "https://helix.cachix.org" ];
extra-trusted-public-keys = [
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
];
};
};
flake.modules.homeManager.helix =
{ pkgs, ... }:
let
svelteLanguageServer = (import ./_svelte-language-server.nix { inherit pkgs; }).overrideAttrs (
_: previousAttrs: {
postInstall = (previousAttrs.postInstall or "") + ''
# @vscode/emmet-helper only enables JSX expansion for JSX syntax;
# Helix's Svelte HTML regions also need it for HTML syntax.
substituteInPlace \
"$out/lib/node_modules/svelte-language-server/packages/language-server/node_modules/@vscode/emmet-helper/lib/cjs/emmetHelper.js" \
--replace-fail \
"'jsx.enabled': syntax === 'jsx'," \
"'jsx.enabled': syntax === 'jsx' || syntax === 'html',"
'';
}
);
in
{
programs.helix = {
enable = true;
package = inputs.helix.packages.${pkgs.stdenv.hostPlatform.system}.default;
extraPackages = with pkgs; [
vtsls
svelteLanguageServer
tailwindcss-language-server
nixd
nixfmt
oxfmt
simple-completion-language-server
odin
ols
rust-analyzer
rustfmt
cargo
zig
zls
lldb
];
settings = {
theme = "kanagawa-custom";
editor = {
soft-wrap.enable = true;
lsp = {
auto-document-highlight = true;
display-inlay-hints = false;
};
rainbow-brackets = true;
line-number = "relative";
cursorline = true;
gutters = [
"code-action-hint"
"diagnostics"
"spacer"
"line-numbers"
"spacer"
"diff"
];
color-modes = true;
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
};
};
themes.kanagawa-custom = {
inherits = "kanagawa";
"ui.highlight".underline = {
color = "dragonBlue";
style = "line";
};
};
languages = {
language-server.scls = {
command = "simple-completion-language-server";
environment.SNIPPETS_PATH = "${pkgs.vimPlugins.friendly-snippets}/snippets";
};
language-server.vtsls.config.vtsls.autoUseWorkspaceTsdk = true;
language = [
{
name = "javascript";
language-servers = [
"vtsls"
"scls"
];
auto-format = true;
}
{
name = "jsx";
language-servers = [
"vtsls"
"scls"
];
auto-format = true;
}
{
name = "typescript";
language-servers = [
"vtsls"
"scls"
];
auto-format = true;
}
{
name = "tsx";
language-servers = [
"vtsls"
"scls"
];
auto-format = true;
}
{
name = "svelte";
formatter = {
command = "${pkgs.coreutils}/bin/env";
args = [
"NODE_PATH=%{workspace_directory}/node_modules"
"oxfmt"
"--stdin-filepath=%{buffer_name}"
];
};
auto-format = true;
language-servers = [
"scls"
"svelteserver"
"tailwindcss-ls"
];
}
{
name = "nix";
auto-format = true;
}
{
name = "rust";
auto-format = true;
}
];
};
};
};
flake.modules.homeManager.primary-editor-helix = {
imports = [ homeModules.helix ];
programs.helix.defaultEditor = true;
};
}
-1
View File
@@ -15,7 +15,6 @@ in
{ pkgs, ... }:
{
networking.networkmanager.plugins = [ pkgs.networkmanager-openvpn ];
programs.openvpn3.enable = true;
services.resolved.enable = true;
};
+4 -82
View File
@@ -14,31 +14,15 @@
spawn = browser;
_props.hotkey-overlay-title = "Browser";
};
"Mod+N" = {
spawn-sh = "open-daily-note";
_props.hotkey-overlay-title = "Daily Note";
};
"Mod+Space" = {
_props.repeat = false;
spawn = launcher;
_props.hotkey-overlay-title = "App Launcher";
};
"Mod+Ctrl+Return" = {
_props.repeat = false;
spawn = shortcutCommands.nixosTerminal;
_props.hotkey-overlay-title = "NixOS Config Terminal";
};
"Mod+Ctrl+Shift+Return" = {
_props.repeat = false;
spawn = shortcutCommands.nixosSwitch;
_props.hotkey-overlay-title = "NixOS Switch";
};
"Mod+Ctrl+E" = {
_props.repeat = false;
spawn = shortcutCommands.editSecrets;
_props.hotkey-overlay-title = "Edit Secrets";
};
"Mod+Ctrl+C" = {
_props.repeat = false;
spawn = shortcutCommands.pickColor;
_props.hotkey-overlay-title = "Pick Color";
};
# Hardware media, volume, and brightness keys
"XF86AudioPlay" = {
@@ -84,11 +68,8 @@
# Screenshots
"Mod+S".screenshot = { };
"Mod+Ctrl+S".screenshot-screen = { };
"Mod+Alt+S".screenshot-window = { };
# Session and compositor controls
"Mod+Shift+Slash".show-hotkey-overlay = { };
"Mod+Escape" = {
toggle-keyboard-shortcuts-inhibit = { };
_props.allow-inhibiting = false;
@@ -97,9 +78,6 @@
spawn-sh = "loginctl lock-session";
_props.hotkey-overlay-title = "Lock Screen";
};
"Mod+Ctrl+Shift+Q".quit = { };
"Ctrl+Alt+Delete".quit = { };
"Mod+Shift+P".power-off-monitors = { };
# Overview and window close
"Mod+O" = {
@@ -112,31 +90,17 @@
};
# Keyboard focus movement
"Mod+Left".focus-column-or-monitor-left = { };
"Mod+Down".focus-window-down = { };
"Mod+Up".focus-window-up = { };
"Mod+Right".focus-column-or-monitor-right = { };
"Mod+H".focus-column-or-monitor-left = { };
"Mod+J".focus-window-down = { };
"Mod+K".focus-window-up = { };
"Mod+L".focus-column-or-monitor-right = { };
# Keyboard window and column movement
"Mod+Alt+Left".move-column-left-or-to-monitor-left = { };
"Mod+Alt+Down".move-window-down-or-to-workspace-down = { };
"Mod+Alt+Up".move-window-up-or-to-workspace-up = { };
"Mod+Alt+Right".move-column-right-or-to-monitor-right = { };
"Mod+Alt+H".move-column-left-or-to-monitor-left = { };
"Mod+Alt+J".move-window-down-or-to-workspace-down = { };
"Mod+Alt+K".move-window-up-or-to-workspace-up = { };
"Mod+Alt+L".move-column-right-or-to-monitor-right = { };
# First and last column navigation
"Mod+Home".focus-column-first = { };
"Mod+End".focus-column-last = { };
"Mod+Alt+Home".move-column-to-first = { };
"Mod+Alt+End".move-column-to-last = { };
# Move focus, columns, and workspaces across monitors
"Mod+Tab".focus-monitor-next = { };
"Mod+A" = {
@@ -147,26 +111,15 @@
"Mod+Alt+Tab".move-column-to-monitor-next = { };
"Mod+Shift+Tab".move-workspace-to-monitor-next = { };
"Mod+Shift+Left".focus-monitor-left = { };
"Mod+Shift+Down".focus-monitor-down = { };
"Mod+Shift+Up".focus-monitor-up = { };
"Mod+Shift+Right".focus-monitor-right = { };
# Linear workspace navigation
"Mod+Page_Down".focus-workspace-down = { };
"Mod+Page_Up".focus-workspace-up = { };
"Mod+U".focus-workspace-down = { };
"Mod+I".focus-workspace-up = { };
# Move columns between adjacent workspaces
"Mod+Alt+Page_Down".move-column-to-workspace-down = { };
"Mod+Alt+Page_Up".move-column-to-workspace-up = { };
"Mod+Alt+U".move-column-to-workspace-down = { };
"Mod+Alt+I".move-column-to-workspace-up = { };
# Reorder workspaces
"Mod+Shift+Page_Down".move-workspace-down = { };
"Mod+Shift+Page_Up".move-workspace-up = { };
"Mod+Shift+U".move-workspace-down = { };
"Mod+Shift+I".move-workspace-up = { };
@@ -196,28 +149,6 @@
"Mod+Shift+WheelScrollDown".focus-column-or-monitor-right = { };
"Mod+Shift+WheelScrollUp".focus-column-or-monitor-left = { };
# Direct workspace focus
"Mod+1".focus-workspace = 1;
"Mod+2".focus-workspace = 2;
"Mod+3".focus-workspace = 3;
"Mod+4".focus-workspace = 4;
"Mod+5".focus-workspace = 5;
"Mod+6".focus-workspace = 6;
"Mod+7".focus-workspace = 7;
"Mod+8".focus-workspace = 8;
"Mod+9".focus-workspace = 9;
# Move columns to numbered workspaces
"Mod+Ctrl+1".move-column-to-workspace = 1;
"Mod+Ctrl+2".move-column-to-workspace = 2;
"Mod+Ctrl+3".move-column-to-workspace = 3;
"Mod+Ctrl+4".move-column-to-workspace = 4;
"Mod+Ctrl+5".move-column-to-workspace = 5;
"Mod+Ctrl+6".move-column-to-workspace = 6;
"Mod+Ctrl+7".move-column-to-workspace = 7;
"Mod+Ctrl+8".move-column-to-workspace = 8;
"Mod+Ctrl+9".move-column-to-workspace = 9;
# Add and remove windows from columns
"Mod+BracketLeft".consume-or-expel-window-left = { };
"Mod+BracketRight".consume-or-expel-window-right = { };
@@ -226,23 +157,14 @@
# Column and window presentation modes
"Mod+R".switch-preset-column-width = { };
"Mod+Shift+R".switch-preset-column-width-back = { };
"Mod+Ctrl+R".reset-window-height = { };
"Mod+Ctrl+Shift+R".switch-preset-window-height = { };
"Mod+F".maximize-column = { };
"Mod+Shift+F".fullscreen-window = { };
"Mod+M".maximize-window-to-edges = { };
"Mod+C".center-column = { };
# Manual column width and window height adjustments
"Mod+Shift+H".set-column-width = "-10%";
"Mod+Shift+L".set-column-width = "+10%";
"Mod+Shift+J".set-window-height = "+10%";
"Mod+Shift+K".set-window-height = "-10%";
"Mod+Minus".set-column-width = "-10%";
"Mod+Equal".set-column-width = "+10%";
"Mod+Shift+Minus".set-window-height = "-10%";
"Mod+Shift+Equal".set-window-height = "+10%";
# Floating and tabbed layout toggles
"Mod+Alt+V".toggle-window-floating = { };
-92
View File
@@ -1,101 +1,9 @@
{
config,
lib,
pkgs,
}:
let
nixosConfigDir = config.facts.account.nixosConfigurationPath;
mkTerminalScript =
{
name,
workdir ? nixosConfigDir,
command ? null,
runtimeInputs ? [ ],
}:
let
args = lib.optionals (command != null) [
"--"
"${pkgs.bash}/bin/bash"
"-lc"
command
];
argString = lib.concatMapStringsSep " " lib.escapeShellArg args;
in
pkgs.writeShellApplication {
inherit name runtimeInputs;
checkPhase = "";
text = lib.concatStringsSep "\n" [
"# shellcheck disable=SC2016"
"cd ${lib.escapeShellArg workdir}"
"exec ${lib.escapeShellArgs config.desktop.commands.terminal} ${argString}"
];
};
in
rec {
scripts = {
nixosTerminal = mkTerminalScript {
name = "niri-shortcut-nixos-terminal";
};
nixosSwitch = mkTerminalScript {
name = "niri-shortcut-nixos-switch";
runtimeInputs = [
pkgs.coreutils
pkgs.nh
];
command = ''
set -o pipefail
log_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/nixos-switch"
mkdir -p "$log_dir"
log="$log_dir/$(date +%Y%m%d-%H%M%S).log"
status_file="$(mktemp)"
printf 'Running nh os switch in %s\n\n' ${lib.escapeShellArg nixosConfigDir}
(
cd ${lib.escapeShellArg nixosConfigDir}
nh os switch
printf '%s' "$?" > "$status_file"
) 2>&1 | tee "$log"
status="$(cat "$status_file")"
rm -f "$status_file"
printf '\nLog: %s\n' "$log"
if [ "$status" -eq 0 ]; then
printf 'NixOS switch completed successfully.\n'
else
printf 'NixOS switch failed with exit code %s.\n' "$status"
fi
printf 'Press Enter to close...'
read -r _
exit "$status"
'';
};
editSecrets = mkTerminalScript {
name = "niri-shortcut-edit-secrets";
runtimeInputs = [ pkgs.sops ];
command = ''
sops edit ${lib.escapeShellArg "${nixosConfigDir}/modules/secrets/secrets.yaml"}
'';
};
pickColor = pkgs.writeShellApplication {
name = "niri-shortcut-pick-color";
runtimeInputs = [
pkgs.libnotify
pkgs.niri
pkgs.wl-clipboard
];
text = ''
color="$(niri msg pick-color)"
printf '%s' "$color" | wl-copy
notify-send 'Color picked' "$color"
'';
};
swapMonitorWorkspaces = pkgs.writeShellApplication {
name = "niri-shortcut-swap-monitor-workspaces";
runtimeInputs = [
-1
View File
@@ -31,7 +31,6 @@ in
palette = kanagawa.palette;
shortcuts = import ./_shortcuts.nix {
inherit
config
lib
pkgs
;
+27 -26
View File
@@ -19,6 +19,17 @@ in
[tool]
fzf-preview = "bat --plain --color=always {-1}"
[group.daily]
paths = ["daily"]
[group.daily.note]
filename = "{{format-date now '%Y-%m-%d'}}"
extension = "md"
template = "daily.md"
[alias]
daily = 'nvim + "$(zk new --no-input --print-path "$ZK_NOTEBOOK_DIR/daily")"'
'';
noteTemplate = ''
---
@@ -27,49 +38,39 @@ in
# {{title}}
'';
openDailyNote = pkgs.writeShellApplication {
name = "open-daily-note";
text = ''
exec ${lib.getExe config.programs.kitty.package} --detach \
--directory "${home}/sync/notes" \
${lib.getExe pkgs.zsh} -lic 'zk daily'
'';
};
in
{
home.packages = with pkgs; [
ripgrep-all
zk
home.packages = [
openDailyNote
pkgs.ripgrep-all
pkgs.zk
];
home.file = {
"sync/notes/.zk/config.toml".text = zkConfig;
"sync/notes/.zk/templates/daily.md".text = "";
"sync/notes/.zk/templates/default.md".text = noteTemplate;
"sync/work/notes/.zk/config.toml".text = zkConfig;
"sync/work/notes/.zk/templates/default.md".text = noteTemplate;
};
home.activation.createNotesLayout = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
${pkgs.coreutils}/bin/mkdir -p \
"${home}/sync/notes/daily" \
"${home}/sync/notes/meetings" \
"${home}/sync/notes/transcripts" \
"${home}/sync/recordings/inbox" \
"${home}/sync/recordings/processing" \
"${home}/sync/recordings/archive" \
"${home}/sync/recordings/failed" \
"${home}/sync/work/notes/meetings" \
"${home}/sync/work/notes/transcripts" \
"${home}/sync/work/recordings/inbox" \
"${home}/sync/work/recordings/processing" \
"${home}/sync/work/recordings/archive" \
"${home}/sync/work/recordings/failed"
"${home}/sync/recordings/failed"
'';
programs.helix.languages = {
language-server.zk = {
command = lib.getExe pkgs.zk;
args = [ "lsp" ];
};
language = [
{
name = "markdown";
roots = [ ".zk" ];
language-servers = [ "zk" ];
}
];
};
};
flake.modules.nixos.notes =
+7
View File
@@ -12,6 +12,7 @@ in
{
config,
lib,
pkgs,
...
}:
let
@@ -66,6 +67,12 @@ in
};
in
{
home.packages = [
(pkgs.evolutionWithPlugins.override {
plugins = [ pkgs.evolution-ews ];
})
];
programs.thunderbird = {
enable = true;
profiles.${config.home.username} = {
@@ -0,0 +1,29 @@
---
name: nixos-maintainer
description: Maintain this NixOS and Home Manager flake by inspecting, changing, simplifying, or validating its configuration. Use for system configuration work in the NixOS repository, not generic Nix questions or unrelated projects.
---
# NixOS Maintainer
Read the applicable `AGENTS.md` and the complete current owner of the behavior
before editing. Trace its imports through the host, profile, and capability
modules so the change lands at the narrowest shared level that matches its real
scope.
Prefer an existing module or native NixOS/Home Manager option. Keep mutable,
secret, credential, and application-owned state outside the Nix store. Verify
unfamiliar pinned interfaces against the exact package source or current primary
documentation.
Preserve unrelated work in a dirty tree. Make the smallest complete change,
format touched Nix files with the repository formatter, and validate only the
affected hosts. Ordinarily run:
```sh
nix flake check --no-build --quiet
nix build --no-link --quiet .#nixosConfigurations.<host>.config.system.build.toplevel
```
Start with a narrower evaluation when it can fail faster. Inspect targeted
failure logs only. Do not switch or boot a generation unless the user explicitly
requests activation.
-77
View File
@@ -19,70 +19,6 @@ let
in
{
flake.modules.homeManager.terminal-foot =
{
lib,
pkgs,
...
}:
let
palette = kanagawa.palette;
hex = lib.removePrefix "#";
in
{
programs.foot = {
enable = true;
settings = {
main = {
font = "JetBrains Mono:style=Medium:size=11:fontfeatures=-liga:fontfeatures=-calt";
font-bold = "JetBrains Mono:style=Bold:size=11:fontfeatures=-liga:fontfeatures=-calt";
font-italic = "JetBrains Mono:style=Medium Italic:size=11:fontfeatures=-liga:fontfeatures=-calt";
font-bold-italic = "JetBrains Mono:style=Bold Italic:size=11:fontfeatures=-liga:fontfeatures=-calt";
gamma-correct-blending = "yes";
pad = "3x3";
};
tweak.box-drawing-base-thickness = 0.1;
bell.system = "no";
scrollback.lines = 10000;
text-bindings."\\x0a" = "Shift+Return Shift+KP_Enter";
colors-dark = {
background = hex palette.background;
foreground = hex palette.foreground;
selection-background = hex palette.selectionBackground;
selection-foreground = hex palette.selectionForeground;
urls = hex palette.url;
cursor = "${hex palette.background} ${hex palette.cursor}";
regular0 = hex palette.terminal.color0;
regular1 = hex palette.terminal.color1;
regular2 = hex palette.terminal.color2;
regular3 = hex palette.terminal.color3;
regular4 = hex palette.terminal.color4;
regular5 = hex palette.terminal.color5;
regular6 = hex palette.terminal.color6;
regular7 = hex palette.terminal.color7;
bright0 = hex palette.terminal.color8;
bright1 = hex palette.terminal.color9;
bright2 = hex palette.terminal.color10;
bright3 = hex palette.terminal.color11;
bright4 = hex palette.terminal.color12;
bright5 = hex palette.terminal.color13;
bright6 = hex palette.terminal.color14;
bright7 = hex palette.terminal.color15;
"16" = hex palette.terminal.color16;
"17" = hex palette.terminal.color17;
};
};
};
};
flake.modules.homeManager.terminal-kitty =
{ pkgs, ... }:
let
@@ -166,19 +102,6 @@ in
};
};
flake.modules.homeManager.primary-terminal-foot =
{ config, lib, ... }:
{
imports = [ homeModules.terminal-foot ];
desktop.commands.terminal = [ (lib.getExe config.programs.foot.package) ];
xdg.terminal-exec = {
enable = true;
settings.default = [ "foot.desktop" ];
};
};
flake.modules.homeManager.primary-terminal-kitty =
{ config, lib, ... }:
{
+93 -7
View File
@@ -19,8 +19,28 @@ in
};
flake.modules.homeManager.walker =
{ lib, pkgs, ... }:
{
config,
lib,
pkgs,
...
}:
let
homeDir = config.home.homeDirectory;
projectRoots =
map
(scope: {
inherit scope;
path = "${homeDir}/dev/${scope}";
})
[
"work"
"own"
"ext"
"forks"
];
walkerDefaults = builtins.fromTOML (builtins.readFile "${inputs.walker}/resources/config.toml");
launcher = pkgs.writeShellApplication {
name = "walker-launcher";
runtimeInputs = [ pkgs.libressl.nc ];
@@ -28,22 +48,88 @@ in
exec nc -U "$XDG_RUNTIME_DIR/walker/walker.sock"
'';
};
openProject = pkgs.writeShellApplication {
name = "open-project";
text = ''
project_path="''${1:-}"
if [[ -z "$project_path" ]]; then
IFS= read -r project_path
fi
cd -- "$project_path"
exec ${lib.getExe config.programs.kitty.package} --detach --directory "$PWD" \
${lib.getExe pkgs.zsh} -lic 'nvim; exec zsh -l'
'';
};
in
{
imports = [ inputs.walker.homeManagerModules.default ];
desktop.commands.launcher = [ (lib.getExe launcher) ];
home.packages = [ openProject ];
xdg.configFile."elephant/menus/projects.lua".text = ''
Name = "projects"
NamePretty = "Projects"
Description = "Git repositories"
Icon = "folder"
Action = "${lib.getExe openProject}"
SearchName = true
RefreshOnChange = {
${lib.concatMapStringsSep "\n " (root: ''"${root.path}",'') projectRoots}
}
local roots = {
${lib.concatMapStringsSep "\n " (
root: ''{ scope = "${root.scope}", path = "${root.path}" },''
) projectRoots}
}
local function repositories(root)
return io.popen(
"${lib.getExe pkgs.findutils} " .. root ..
" -mindepth 1 \\( -type d \\( -name .archive -o -name .worktrees \\) -prune \\)" ..
" -o \\( -name .git -print \\) 2>/dev/null"
)
end
function GetEntries()
local entries = {}
for _, root in ipairs(roots) do
local handle = repositories(root.path)
if handle then
for git_path in handle:lines() do
local project = git_path:gsub("/%.git$", "")
local relative = project:sub(#root.path + 2)
table.insert(entries, {
Text = project:match("([^/]+)$"),
Subtext = root.scope .. " · " .. relative,
Value = project,
Keywords = { root.scope, relative, project },
})
end
handle:close()
end
end
return entries
end
'';
programs.walker = {
enable = true;
runAsService = true;
config.providers.prefixes = [
{
provider = "bitwarden";
prefix = "?";
}
];
config.providers = {
default = walkerDefaults.providers.default ++ [ "menus:projects" ];
prefixes = walkerDefaults.providers.prefixes ++ [
{
provider = "bitwarden";
prefix = "?";
}
];
};
};
};
}
-5
View File
@@ -1,5 +0,0 @@
{
flake.modules.homeManager.zed = {
programs.zed-editor.enable = true;
};
}