refactor default apps and add walker

This commit is contained in:
2026-05-06 19:32:37 +02:00
parent be1a9b7852
commit d6878abc61
10 changed files with 161 additions and 299 deletions
+66 -52
View File
@@ -1,48 +1,69 @@
{ ... }:
{ config, ... }:
let
mkPrimaryDesktopApplication =
homeModules = config.flake.modules.homeManager;
vivaldiPackage = pkgs: pkgs.vivaldi;
nautilusPackage = pkgs: pkgs.nautilus;
in
{
name,
package,
desktopEntryName,
}:
flake.modules.homeManager.browser-vivaldi =
{ pkgs, ... }:
{
meta.desktop.${name} = {
inherit desktopEntryName;
package = package pkgs;
home.packages = [ (vivaldiPackage pkgs) ];
};
};
in
flake.modules.homeManager.primary-browser-vivaldi =
{ lib, pkgs, ... }:
{
flake.modules.homeManager.primary-browser-vivaldi = mkPrimaryDesktopApplication {
name = "browser";
package = pkgs: pkgs.vivaldi;
desktopEntryName = "vivaldi-stable";
imports = [ homeModules.browser-vivaldi ];
meta.desktop.browserCommand = lib.getExe (vivaldiPackage pkgs);
home.sessionVariables.BROWSER = lib.getExe (vivaldiPackage pkgs);
xdg.mimeApps.defaultApplicationPackages = [ (vivaldiPackage pkgs) ];
};
flake.modules.homeManager.primary-file-manager-nautilus = mkPrimaryDesktopApplication {
name = "fileManager";
package = pkgs: pkgs.nautilus;
desktopEntryName = "org.gnome.Nautilus";
};
flake.modules.homeManager.desktop-defaults =
{ config, pkgs, ... }:
let
browser = config.meta.desktop.browser;
fileManager = config.meta.desktop.fileManager;
homeDir = config.home.homeDirectory;
localDir = "${homeDir}/.local";
mediaDir = "${homeDir}/media";
in
flake.modules.homeManager.file-manager-nautilus =
{ pkgs, ... }:
{
home.preferXdgDirectories = true;
home.sessionVariables.BROWSER = browser.command;
home.packages = [ (nautilusPackage pkgs) ];
};
home.packages =
with pkgs;
[
flake.modules.homeManager.primary-file-manager-nautilus =
{ lib, pkgs, ... }:
{
imports = [ homeModules.file-manager-nautilus ];
meta.desktop.fileManagerCommand = lib.getExe (nautilusPackage pkgs);
xdg.mimeApps.defaultApplicationPackages = [ (nautilusPackage pkgs) ];
};
flake.modules.homeManager.image-viewer-imv = {
programs.imv.enable = true;
};
flake.modules.homeManager.default-image-viewer-imv =
{ pkgs, ... }:
{
imports = [ homeModules.image-viewer-imv ];
xdg.mimeApps.defaultApplicationPackages = [ pkgs.imv ];
};
flake.modules.homeManager.document-viewer-sioyek = {
programs.sioyek.enable = true;
};
flake.modules.homeManager.default-document-viewer-sioyek =
{ pkgs, ... }:
{
imports = [ homeModules.document-viewer-sioyek ];
xdg.mimeApps.defaultApplicationPackages = [ pkgs.sioyek ];
};
flake.modules.homeManager.workstation-apps =
{ pkgs, ... }:
{
home.packages = with pkgs; [
postman
spotify
calcure
@@ -50,14 +71,18 @@ in
unzip
gimp
dbeaver-bin
]
++ [
browser.package
fileManager.package
];
};
programs.imv.enable = true;
programs.sioyek.enable = true;
flake.modules.homeManager.xdg =
{ config, ... }:
let
homeDir = config.home.homeDirectory;
localDir = "${homeDir}/.local";
mediaDir = "${homeDir}/media";
in
{
home.preferXdgDirectories = true;
xdg = {
enable = true;
@@ -85,17 +110,6 @@ in
mimeApps = {
enable = true;
defaultApplicationPackages =
with pkgs;
[
sioyek
imv
neovim
]
++ [
fileManager.package
browser.package
];
};
};
};
+6
View File
@@ -4,6 +4,12 @@ let
repoTheme = config.repo.theme.kanagawa;
in
{
flake.modules.homeManager.default-editor-neovim =
{ pkgs, ... }:
{
xdg.mimeApps.defaultApplicationPackages = [ pkgs.neovim ];
};
flake.modules.homeManager.neovim =
{
pkgs,
+2 -12
View File
@@ -1,6 +1,6 @@
{
browserCommand,
launcherCommands,
launcherCommand,
shortcutCommands,
terminalCommand,
}:
@@ -16,7 +16,7 @@
};
"Mod+Space" = {
repeat = false;
action.spawn = launcherCommands.open;
action.spawn = launcherCommand;
hotkey-overlay.title = "App Launcher";
};
"Mod+E" = {
@@ -39,16 +39,6 @@
action.spawn = shortcutCommands.editSecrets;
hotkey-overlay.title = "Edit Secrets";
};
"Mod+Ctrl+F" = {
repeat = false;
action.spawn = launcherCommands.files;
hotkey-overlay.title = "Find Files";
};
"Mod+V" = {
repeat = false;
action.spawn = shortcutCommands.clipboardHistory;
hotkey-overlay.title = "Clipboard History";
};
"Mod+Ctrl+C" = {
repeat = false;
action.spawn = shortcutCommands.pickColor;
+7 -59
View File
@@ -6,72 +6,40 @@
}:
let
nixosConfigDir = repo.account.nixosConfigurationPath;
launcherDmenuCommand =
lib.concatMapStringsSep " " lib.escapeShellArg
config.meta.desktop.launcher.commands.dmenu;
mkTerminalScript =
{
name,
title,
appId ? "niri-shortcut-terminal",
workdir ? nixosConfigDir,
command ? null,
runtimeInputs ? [ ],
}:
let
args =
(
if config.meta.desktop.terminal.desktopEntryName == "kitty" then
[
"--class"
appId
"--title"
title
"--directory"
workdir
]
else if config.meta.desktop.terminal.desktopEntryName == "foot" then
[
"--app-id"
appId
"--title"
title
"--working-directory"
workdir
]
else
[ ]
)
++ lib.optionals (command != null) [
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 = ''
# shellcheck disable=SC2016
cd ${lib.escapeShellArg workdir}
exec ${lib.escapeShellArg config.meta.desktop.terminal.command} ${
lib.concatMapStringsSep " " lib.escapeShellArg args
}
'';
text = lib.concatStringsSep "\n" [
"# shellcheck disable=SC2016"
"cd ${lib.escapeShellArg workdir}"
"exec ${lib.escapeShellArg config.meta.desktop.terminalCommand} ${argString}"
];
};
in
rec {
scripts = {
nixosTerminal = mkTerminalScript {
name = "niri-shortcut-nixos-terminal";
title = "NixOS Config";
};
nixosSwitch = mkTerminalScript {
name = "niri-shortcut-nixos-switch";
title = "NixOS Switch";
appId = "niri-shortcut-float";
runtimeInputs = [
pkgs.coreutils
pkgs.nh
@@ -109,8 +77,6 @@ rec {
editSecrets = mkTerminalScript {
name = "niri-shortcut-edit-secrets";
title = "Edit Secrets";
appId = "niri-shortcut-float";
runtimeInputs = [ pkgs.sops ];
command = ''
sops edit ${lib.escapeShellArg "${nixosConfigDir}/modules/secrets/secrets.yaml"}
@@ -119,29 +85,11 @@ rec {
neovimProjects = mkTerminalScript {
name = "niri-shortcut-neovim-projects";
title = "Neovim Projects";
command = ''
nvim -c 'Telescope projects'
'';
};
clipboardHistory = pkgs.writeShellApplication {
name = "niri-shortcut-clipboard-history";
runtimeInputs = [
pkgs.cliphist
config.meta.desktop.launcher.package
pkgs.wl-clipboard
];
text = ''
selection="$(cliphist list | ${launcherDmenuCommand})"
if [ -z "$selection" ]; then
exit 0
fi
printf '%s' "$selection" | cliphist decode | wl-copy
'';
};
pickColor = pkgs.writeShellApplication {
name = "niri-shortcut-pick-color";
runtimeInputs = [
+3 -13
View File
@@ -59,9 +59,6 @@ in
brightnessctl
xwayland-satellite
]
++ [
config.meta.desktop.fileManager.package
]
++ lib.attrValues shortcuts.scripts;
};
@@ -139,13 +136,6 @@ in
};
clip-to-geometry = true;
}
{
matches = [
{ app-id = "^niri-shortcut-float$"; }
];
open-floating = true;
open-focused = true;
}
];
debug.honor-xdg-activation-with-invalid-serial = true;
@@ -163,9 +153,9 @@ in
};
binds = import ./_bindings.nix {
browserCommand = config.meta.desktop.browser.command;
launcherCommands = config.meta.desktop.launcher.commands;
terminalCommand = config.meta.desktop.terminal.command;
browserCommand = config.meta.desktop.browserCommand;
launcherCommand = config.meta.desktop.launcherCommand;
terminalCommand = config.meta.desktop.terminalCommand;
shortcutCommands = shortcuts.commands;
};
};
+22 -32
View File
@@ -19,30 +19,6 @@ let
'';
};
mkTerminal =
{
desktopEntryName,
packageFor,
terminalModule,
}:
{ config, pkgs, ... }:
let
package = packageFor pkgs;
in
{
imports = [ terminalModule ];
config = {
meta.desktop.terminal = {
inherit desktopEntryName package;
};
xdg.terminal-exec = {
enable = true;
settings.default = [ config.meta.desktop.terminal.desktopId ];
};
};
};
in
{
flake.modules.homeManager.terminal-foot =
@@ -194,15 +170,29 @@ in
};
};
flake.modules.homeManager.primary-terminal-foot = mkTerminal {
desktopEntryName = "foot";
packageFor = pkgs: pkgs.foot;
terminalModule = config.flake.modules.homeManager.terminal-foot;
flake.modules.homeManager.primary-terminal-foot =
{ lib, pkgs, ... }:
{
imports = [ config.flake.modules.homeManager.terminal-foot ];
meta.desktop.terminalCommand = lib.getExe pkgs.foot;
xdg.terminal-exec = {
enable = true;
settings.default = [ "foot.desktop" ];
};
};
flake.modules.homeManager.primary-terminal-kitty = mkTerminal {
desktopEntryName = "kitty";
packageFor = pkgs: kittySingleInstance pkgs;
terminalModule = config.flake.modules.homeManager.terminal-kitty;
flake.modules.homeManager.primary-terminal-kitty =
{ lib, pkgs, ... }:
{
imports = [ config.flake.modules.homeManager.terminal-kitty ];
meta.desktop.terminalCommand = lib.getExe (kittySingleInstance pkgs);
xdg.terminal-exec = {
enable = true;
settings.default = [ "kitty.desktop" ];
};
};
}
+1 -24
View File
@@ -14,7 +14,6 @@ in
let
repoTheme = repo.theme.kanagawa;
palette = repoTheme.palette;
launcherCommand = lib.getExe config.programs.vicinae.package;
in
{
programs.vicinae = {
@@ -74,28 +73,6 @@ in
];
};
meta.desktop.launcher = {
package = config.programs.vicinae.package;
commands = {
open = [
launcherCommand
"toggle"
];
files = [
launcherCommand
"deeplink"
"vicinae://extensions/sameoldlab/fuzzy-files/find"
];
dmenu = [
launcherCommand
"dmenu"
"--navigation-title"
"Clipboard"
"--placeholder"
"Search clipboard"
"--no-metadata"
];
};
};
meta.desktop.launcherCommand = lib.getExe config.programs.vicinae.package;
};
}
+26 -26
View File
@@ -1,40 +1,40 @@
{ inputs, ... }:
{ config, inputs, ... }:
let
homeModules = config.flake.modules.homeManager;
in
{
flake.modules.nixos.walker-cache = {
nix.settings = {
extra-substituters = [
"https://walker.cachix.org"
"https://walker-git.cachix.org"
];
extra-trusted-public-keys = [
"walker.cachix.org-1:fG8q+uAaMqhsMxWjwvk0IMb4mFPFLqHjuvfwQxE4oJM="
"walker-git.cachix.org-1:vmC0ocfPWh0S/vRAQGtChuiZBTAe4wiKDeyyXM0/7pM="
];
};
};
flake.modules.homeManager.walker =
{
config,
lib,
...
}:
let
launcherCommand = lib.getExe config.programs.walker.package;
in
{
imports = [ inputs.walker.homeManagerModules.default ];
programs.walker = {
enable = true;
runAsService = true;
enable = false;
runAsService = false;
};
};
meta.desktop.launcher = {
package = config.programs.walker.package;
commands = {
open = [ launcherCommand ];
files = [
launcherCommand
"--query"
"/"
"--placeholder"
"Find files"
];
dmenu = [
launcherCommand
"--dmenu"
"--placeholder"
"Search clipboard"
];
};
};
flake.modules.homeManager.primary-launcher-walker =
{ config, lib, ... }:
{
imports = [ homeModules.walker ];
meta.desktop.launcherCommand = lib.getExe config.programs.walker.package;
};
}
+8 -66
View File
@@ -81,64 +81,6 @@ let
}
);
desktopApplicationType = lib.types.submodule (
{ config, ... }:
{
options = {
package = lib.mkOption {
type = lib.types.package;
};
command = lib.mkOption {
type = lib.types.str;
default = lib.getExe config.package;
defaultText = lib.literalExpression "lib.getExe config.package";
};
desktopEntryName = lib.mkOption {
type = lib.types.str;
};
desktopId = lib.mkOption {
type = lib.types.str;
default = "${config.desktopEntryName}.desktop";
defaultText = lib.literalExpression ''"${config.desktopEntryName}.desktop"'';
};
};
}
);
launcherType = lib.types.submodule (
{ config, ... }:
{
options = {
package = lib.mkOption {
type = lib.types.package;
};
command = lib.mkOption {
type = lib.types.str;
default = lib.getExe config.package;
defaultText = lib.literalExpression "lib.getExe config.package";
};
commands = {
open = lib.mkOption {
type = lib.types.listOf lib.types.str;
};
files = lib.mkOption {
type = lib.types.listOf lib.types.str;
};
dmenu = lib.mkOption {
type = lib.types.listOf lib.types.str;
};
};
};
}
);
displayType = lib.types.submodule (
{ ... }:
{
@@ -255,20 +197,20 @@ in
config.flake.modules.homeManager.meta =
{ ... }:
{
options.meta.desktop.browser = lib.mkOption {
type = desktopApplicationType;
options.meta.desktop.browserCommand = lib.mkOption {
type = lib.types.str;
};
options.meta.desktop.fileManager = lib.mkOption {
type = desktopApplicationType;
options.meta.desktop.fileManagerCommand = lib.mkOption {
type = lib.types.str;
};
options.meta.desktop.terminal = lib.mkOption {
type = desktopApplicationType;
options.meta.desktop.terminalCommand = lib.mkOption {
type = lib.types.str;
};
options.meta.desktop.launcher = lib.mkOption {
type = launcherType;
options.meta.desktop.launcherCommand = lib.mkOption {
type = lib.types.str;
};
options.meta.pinentry.package = lib.mkOption {
+7 -2
View File
@@ -24,6 +24,7 @@ in
nixosModules.theme
nixosModules.ai
nixosModules.hidraw-access
nixosModules.walker-cache
];
services.dbus.implementation = "broker";
@@ -42,9 +43,14 @@ in
homeModules.passwords
homeModules.clipboard
homeModules.dev-tools
homeModules.xdg
homeModules.workstation-apps
homeModules.primary-browser-vivaldi
homeModules.primary-file-manager-nautilus
homeModules.desktop-defaults
homeModules.primary-launcher-walker
homeModules.default-image-viewer-imv
homeModules.default-document-viewer-sioyek
homeModules.default-editor-neovim
homeModules.email
homeModules.mpv
homeModules.niri
@@ -58,7 +64,6 @@ in
homeModules.primary-terminal-kitty
homeModules.terminal-foot
homeModules.theme
homeModules.walker
homeModules.noctalia
{
programs.discord = {