chore: advance workstation workflow pilots
This commit is contained in:
1 parent
2c0338329b
commit
c9ee688537
18 files changed
+328
-553
No files matched your search
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -15,7 +15,6 @@ in
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
networking.networkmanager.plugins = [ pkgs.networkmanager-openvpn ];
|
||||
programs.openvpn3.enable = true;
|
||||
services.resolved.enable = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -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 = { };
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -31,7 +31,6 @@ in
|
||||
palette = kanagawa.palette;
|
||||
shortcuts = import ./_shortcuts.nix {
|
||||
inherit
|
||||
config
|
||||
lib
|
||||
pkgs
|
||||
;
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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.
|
||||
@@ -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, ... }:
|
||||
{
|
||||
|
||||
@@ -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 = "?";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
flake.modules.homeManager.zed = {
|
||||
programs.zed-editor.enable = true;
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user