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
+71 -57
View File
@@ -1,63 +1,88 @@
{ ... }: { config, ... }:
let let
mkPrimaryDesktopApplication = homeModules = config.flake.modules.homeManager;
{ vivaldiPackage = pkgs: pkgs.vivaldi;
name, nautilusPackage = pkgs: pkgs.nautilus;
package,
desktopEntryName,
}:
{ pkgs, ... }:
{
meta.desktop.${name} = {
inherit desktopEntryName;
package = package pkgs;
};
};
in in
{ {
flake.modules.homeManager.primary-browser-vivaldi = mkPrimaryDesktopApplication { flake.modules.homeManager.browser-vivaldi =
name = "browser"; { pkgs, ... }:
package = pkgs: pkgs.vivaldi; {
desktopEntryName = "vivaldi-stable"; home.packages = [ (vivaldiPackage pkgs) ];
};
flake.modules.homeManager.primary-browser-vivaldi =
{ lib, pkgs, ... }:
{
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.file-manager-nautilus =
{ pkgs, ... }:
{
home.packages = [ (nautilusPackage 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.primary-file-manager-nautilus = mkPrimaryDesktopApplication { flake.modules.homeManager.default-image-viewer-imv =
name = "fileManager"; { pkgs, ... }:
package = pkgs: pkgs.nautilus; {
desktopEntryName = "org.gnome.Nautilus"; imports = [ homeModules.image-viewer-imv ];
xdg.mimeApps.defaultApplicationPackages = [ pkgs.imv ];
};
flake.modules.homeManager.document-viewer-sioyek = {
programs.sioyek.enable = true;
}; };
flake.modules.homeManager.desktop-defaults = flake.modules.homeManager.default-document-viewer-sioyek =
{ config, pkgs, ... }: { pkgs, ... }:
{
imports = [ homeModules.document-viewer-sioyek ];
xdg.mimeApps.defaultApplicationPackages = [ pkgs.sioyek ];
};
flake.modules.homeManager.workstation-apps =
{ pkgs, ... }:
{
home.packages = with pkgs; [
postman
spotify
calcure
planify
unzip
gimp
dbeaver-bin
];
};
flake.modules.homeManager.xdg =
{ config, ... }:
let let
browser = config.meta.desktop.browser;
fileManager = config.meta.desktop.fileManager;
homeDir = config.home.homeDirectory; homeDir = config.home.homeDirectory;
localDir = "${homeDir}/.local"; localDir = "${homeDir}/.local";
mediaDir = "${homeDir}/media"; mediaDir = "${homeDir}/media";
in in
{ {
home.preferXdgDirectories = true; home.preferXdgDirectories = true;
home.sessionVariables.BROWSER = browser.command;
home.packages =
with pkgs;
[
postman
spotify
calcure
planify
unzip
gimp
dbeaver-bin
]
++ [
browser.package
fileManager.package
];
programs.imv.enable = true;
programs.sioyek.enable = true;
xdg = { xdg = {
enable = true; enable = true;
@@ -85,17 +110,6 @@ in
mimeApps = { mimeApps = {
enable = true; 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; repoTheme = config.repo.theme.kanagawa;
in in
{ {
flake.modules.homeManager.default-editor-neovim =
{ pkgs, ... }:
{
xdg.mimeApps.defaultApplicationPackages = [ pkgs.neovim ];
};
flake.modules.homeManager.neovim = flake.modules.homeManager.neovim =
{ {
pkgs, pkgs,
+2 -12
View File
@@ -1,6 +1,6 @@
{ {
browserCommand, browserCommand,
launcherCommands, launcherCommand,
shortcutCommands, shortcutCommands,
terminalCommand, terminalCommand,
}: }:
@@ -16,7 +16,7 @@
}; };
"Mod+Space" = { "Mod+Space" = {
repeat = false; repeat = false;
action.spawn = launcherCommands.open; action.spawn = launcherCommand;
hotkey-overlay.title = "App Launcher"; hotkey-overlay.title = "App Launcher";
}; };
"Mod+E" = { "Mod+E" = {
@@ -39,16 +39,6 @@
action.spawn = shortcutCommands.editSecrets; action.spawn = shortcutCommands.editSecrets;
hotkey-overlay.title = "Edit Secrets"; 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" = { "Mod+Ctrl+C" = {
repeat = false; repeat = false;
action.spawn = shortcutCommands.pickColor; action.spawn = shortcutCommands.pickColor;
+12 -64
View File
@@ -6,72 +6,40 @@
}: }:
let let
nixosConfigDir = repo.account.nixosConfigurationPath; nixosConfigDir = repo.account.nixosConfigurationPath;
launcherDmenuCommand =
lib.concatMapStringsSep " " lib.escapeShellArg
config.meta.desktop.launcher.commands.dmenu;
mkTerminalScript = mkTerminalScript =
{ {
name, name,
title,
appId ? "niri-shortcut-terminal",
workdir ? nixosConfigDir, workdir ? nixosConfigDir,
command ? null, command ? null,
runtimeInputs ? [ ], runtimeInputs ? [ ],
}: }:
let let
args = args = lib.optionals (command != null) [
( "--"
if config.meta.desktop.terminal.desktopEntryName == "kitty" then "${pkgs.bash}/bin/bash"
[ "-lc"
"--class" command
appId ];
"--title" argString = lib.concatMapStringsSep " " lib.escapeShellArg args;
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) [
"--"
"${pkgs.bash}/bin/bash"
"-lc"
command
];
in in
pkgs.writeShellApplication { pkgs.writeShellApplication {
inherit name runtimeInputs; inherit name runtimeInputs;
checkPhase = ""; checkPhase = "";
text = '' text = lib.concatStringsSep "\n" [
# shellcheck disable=SC2016 "# shellcheck disable=SC2016"
cd ${lib.escapeShellArg workdir} "cd ${lib.escapeShellArg workdir}"
exec ${lib.escapeShellArg config.meta.desktop.terminal.command} ${ "exec ${lib.escapeShellArg config.meta.desktop.terminalCommand} ${argString}"
lib.concatMapStringsSep " " lib.escapeShellArg args ];
}
'';
}; };
in in
rec { rec {
scripts = { scripts = {
nixosTerminal = mkTerminalScript { nixosTerminal = mkTerminalScript {
name = "niri-shortcut-nixos-terminal"; name = "niri-shortcut-nixos-terminal";
title = "NixOS Config";
}; };
nixosSwitch = mkTerminalScript { nixosSwitch = mkTerminalScript {
name = "niri-shortcut-nixos-switch"; name = "niri-shortcut-nixos-switch";
title = "NixOS Switch";
appId = "niri-shortcut-float";
runtimeInputs = [ runtimeInputs = [
pkgs.coreutils pkgs.coreutils
pkgs.nh pkgs.nh
@@ -109,8 +77,6 @@ rec {
editSecrets = mkTerminalScript { editSecrets = mkTerminalScript {
name = "niri-shortcut-edit-secrets"; name = "niri-shortcut-edit-secrets";
title = "Edit Secrets";
appId = "niri-shortcut-float";
runtimeInputs = [ pkgs.sops ]; runtimeInputs = [ pkgs.sops ];
command = '' command = ''
sops edit ${lib.escapeShellArg "${nixosConfigDir}/modules/secrets/secrets.yaml"} sops edit ${lib.escapeShellArg "${nixosConfigDir}/modules/secrets/secrets.yaml"}
@@ -119,29 +85,11 @@ rec {
neovimProjects = mkTerminalScript { neovimProjects = mkTerminalScript {
name = "niri-shortcut-neovim-projects"; name = "niri-shortcut-neovim-projects";
title = "Neovim Projects";
command = '' command = ''
nvim -c 'Telescope projects' 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 { pickColor = pkgs.writeShellApplication {
name = "niri-shortcut-pick-color"; name = "niri-shortcut-pick-color";
runtimeInputs = [ runtimeInputs = [
+3 -13
View File
@@ -59,9 +59,6 @@ in
brightnessctl brightnessctl
xwayland-satellite xwayland-satellite
] ]
++ [
config.meta.desktop.fileManager.package
]
++ lib.attrValues shortcuts.scripts; ++ lib.attrValues shortcuts.scripts;
}; };
@@ -139,13 +136,6 @@ in
}; };
clip-to-geometry = true; clip-to-geometry = true;
} }
{
matches = [
{ app-id = "^niri-shortcut-float$"; }
];
open-floating = true;
open-focused = true;
}
]; ];
debug.honor-xdg-activation-with-invalid-serial = true; debug.honor-xdg-activation-with-invalid-serial = true;
@@ -163,9 +153,9 @@ in
}; };
binds = import ./_bindings.nix { binds = import ./_bindings.nix {
browserCommand = config.meta.desktop.browser.command; browserCommand = config.meta.desktop.browserCommand;
launcherCommands = config.meta.desktop.launcher.commands; launcherCommand = config.meta.desktop.launcherCommand;
terminalCommand = config.meta.desktop.terminal.command; terminalCommand = config.meta.desktop.terminalCommand;
shortcutCommands = shortcuts.commands; shortcutCommands = shortcuts.commands;
}; };
}; };
+24 -34
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 in
{ {
flake.modules.homeManager.terminal-foot = flake.modules.homeManager.terminal-foot =
@@ -194,15 +170,29 @@ in
}; };
}; };
flake.modules.homeManager.primary-terminal-foot = mkTerminal { flake.modules.homeManager.primary-terminal-foot =
desktopEntryName = "foot"; { lib, pkgs, ... }:
packageFor = pkgs: pkgs.foot; {
terminalModule = config.flake.modules.homeManager.terminal-foot; imports = [ config.flake.modules.homeManager.terminal-foot ];
};
flake.modules.homeManager.primary-terminal-kitty = mkTerminal { meta.desktop.terminalCommand = lib.getExe pkgs.foot;
desktopEntryName = "kitty";
packageFor = pkgs: kittySingleInstance pkgs; xdg.terminal-exec = {
terminalModule = config.flake.modules.homeManager.terminal-kitty; enable = true;
}; settings.default = [ "foot.desktop" ];
};
};
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 let
repoTheme = repo.theme.kanagawa; repoTheme = repo.theme.kanagawa;
palette = repoTheme.palette; palette = repoTheme.palette;
launcherCommand = lib.getExe config.programs.vicinae.package;
in in
{ {
programs.vicinae = { programs.vicinae = {
@@ -74,28 +73,6 @@ in
]; ];
}; };
meta.desktop.launcher = { meta.desktop.launcherCommand = lib.getExe config.programs.vicinae.package;
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"
];
};
};
}; };
} }
+27 -27
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 = flake.modules.homeManager.walker =
{ {
config, config,
lib,
... ...
}: }:
let
launcherCommand = lib.getExe config.programs.walker.package;
in
{ {
imports = [ inputs.walker.homeManagerModules.default ]; imports = [ inputs.walker.homeManagerModules.default ];
programs.walker = { programs.walker = {
enable = true; enable = false;
runAsService = true; 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 ( displayType = lib.types.submodule (
{ ... }: { ... }:
{ {
@@ -255,20 +197,20 @@ in
config.flake.modules.homeManager.meta = config.flake.modules.homeManager.meta =
{ ... }: { ... }:
{ {
options.meta.desktop.browser = lib.mkOption { options.meta.desktop.browserCommand = lib.mkOption {
type = desktopApplicationType; type = lib.types.str;
}; };
options.meta.desktop.fileManager = lib.mkOption { options.meta.desktop.fileManagerCommand = lib.mkOption {
type = desktopApplicationType; type = lib.types.str;
}; };
options.meta.desktop.terminal = lib.mkOption { options.meta.desktop.terminalCommand = lib.mkOption {
type = desktopApplicationType; type = lib.types.str;
}; };
options.meta.desktop.launcher = lib.mkOption { options.meta.desktop.launcherCommand = lib.mkOption {
type = launcherType; type = lib.types.str;
}; };
options.meta.pinentry.package = lib.mkOption { options.meta.pinentry.package = lib.mkOption {
+7 -2
View File
@@ -24,6 +24,7 @@ in
nixosModules.theme nixosModules.theme
nixosModules.ai nixosModules.ai
nixosModules.hidraw-access nixosModules.hidraw-access
nixosModules.walker-cache
]; ];
services.dbus.implementation = "broker"; services.dbus.implementation = "broker";
@@ -42,9 +43,14 @@ in
homeModules.passwords homeModules.passwords
homeModules.clipboard homeModules.clipboard
homeModules.dev-tools homeModules.dev-tools
homeModules.xdg
homeModules.workstation-apps
homeModules.primary-browser-vivaldi homeModules.primary-browser-vivaldi
homeModules.primary-file-manager-nautilus 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.email
homeModules.mpv homeModules.mpv
homeModules.niri homeModules.niri
@@ -58,7 +64,6 @@ in
homeModules.primary-terminal-kitty homeModules.primary-terminal-kitty
homeModules.terminal-foot homeModules.terminal-foot
homeModules.theme homeModules.theme
homeModules.walker
homeModules.noctalia homeModules.noctalia
{ {
programs.discord = { programs.discord = {