422 lines
9.4 KiB
Nix
422 lines
9.4 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
# Walker app launcher configuration for OmniXY
|
|
# Modern replacement for Rofi with better Wayland integration
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.omnixy;
|
|
omnixy = import ./helpers.nix { inherit config pkgs lib; };
|
|
in
|
|
{
|
|
config = mkIf (cfg.enable or true) {
|
|
# Add walker and convenience scripts to system packages
|
|
environment.systemPackages = (with pkgs; [
|
|
walker
|
|
]) ++ [
|
|
# Convenience scripts
|
|
(omnixy.makeScript "omnixy-launcher" "Launch OmniXY app launcher" ''
|
|
walker --config ~/.config/walker/config.json --css ~/.config/walker/themes/style.css
|
|
'')
|
|
|
|
(omnixy.makeScript "omnixy-run" "Quick command runner" ''
|
|
walker --modules runner --config ~/.config/walker/config.json --css ~/.config/walker/themes/style.css
|
|
'')
|
|
|
|
(omnixy.makeScript "omnixy-apps" "Application launcher" ''
|
|
walker --modules applications --config ~/.config/walker/config.json --css ~/.config/walker/themes/style.css
|
|
'')
|
|
|
|
(omnixy.makeScript "omnixy-files" "File finder" ''
|
|
walker --modules finder --config ~/.config/walker/config.json --css ~/.config/walker/themes/style.css
|
|
'')
|
|
];
|
|
|
|
# Create Walker configuration
|
|
environment.etc."omnixy/walker/config.json".text = builtins.toJSON {
|
|
# General configuration
|
|
placeholder = "Search applications, files, and more...";
|
|
fullscreen = false;
|
|
layer = "overlay";
|
|
modules = [
|
|
{
|
|
name = "applications";
|
|
src = "applications";
|
|
transform = "uppercase";
|
|
}
|
|
{
|
|
name = "runner";
|
|
src = "runner";
|
|
}
|
|
{
|
|
name = "websearch";
|
|
src = "websearch";
|
|
engines = [
|
|
{
|
|
name = "Google";
|
|
url = "https://www.google.com/search?q=%s";
|
|
icon = "web-browser";
|
|
}
|
|
{
|
|
name = "GitHub";
|
|
url = "https://github.com/search?q=%s";
|
|
icon = "github";
|
|
}
|
|
{
|
|
name = "NixOS Packages";
|
|
url = "https://search.nixos.org/packages?query=%s";
|
|
icon = "nix-snowflake";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
name = "finder";
|
|
src = "finder";
|
|
dirs = [
|
|
"/home/${cfg.user}"
|
|
"/home/${cfg.user}/Documents"
|
|
"/home/${cfg.user}/Downloads"
|
|
"/home/${cfg.user}/Desktop"
|
|
];
|
|
}
|
|
{
|
|
name = "calc";
|
|
src = "calc";
|
|
}
|
|
];
|
|
|
|
# UI Configuration
|
|
ui = {
|
|
anchors = {
|
|
top = false;
|
|
left = true;
|
|
right = false;
|
|
bottom = false;
|
|
};
|
|
margin = {
|
|
top = 100;
|
|
bottom = 0;
|
|
left = 100;
|
|
right = 0;
|
|
};
|
|
width = 600;
|
|
height = 500;
|
|
show_initial_entries = true;
|
|
show_search_text = true;
|
|
scroll_height = 300;
|
|
};
|
|
|
|
# Search configuration
|
|
search = {
|
|
delay = 100;
|
|
placeholder = "Type to search...";
|
|
force_keyboard_focus = true;
|
|
};
|
|
|
|
# List configuration
|
|
list = {
|
|
height = 200;
|
|
always_show = true;
|
|
max_entries = 50;
|
|
};
|
|
|
|
# Icons
|
|
icons = {
|
|
theme = "Papirus";
|
|
size = 32;
|
|
};
|
|
|
|
# Theming based on current theme
|
|
theme = if cfg.theme == "gruvbox" then "gruvbox"
|
|
else if cfg.theme == "nord" then "nord"
|
|
else if cfg.theme == "catppuccin" then "catppuccin"
|
|
else if cfg.theme == "tokyo-night" then "tokyo-night"
|
|
else "default";
|
|
};
|
|
|
|
# Create Walker CSS theme files
|
|
environment.etc."omnixy/walker/themes/gruvbox.css".text = ''
|
|
* {
|
|
color: #ebdbb2;
|
|
background-color: #282828;
|
|
font-family: "JetBrainsMono Nerd Font", monospace;
|
|
font-size: 14px;
|
|
}
|
|
|
|
window {
|
|
background-color: rgba(40, 40, 40, 0.95);
|
|
border: 2px solid #a89984;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
#search {
|
|
background-color: #3c3836;
|
|
border: 1px solid #665c54;
|
|
border-radius: 8px;
|
|
padding: 8px 12px;
|
|
margin: 12px;
|
|
color: #ebdbb2;
|
|
}
|
|
|
|
#search:focus {
|
|
border-color: #d79921;
|
|
}
|
|
|
|
#list {
|
|
background-color: transparent;
|
|
padding: 0 12px 12px 12px;
|
|
}
|
|
|
|
.item {
|
|
padding: 8px 12px;
|
|
border-radius: 6px;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.item:selected {
|
|
background-color: #504945;
|
|
color: #fbf1c7;
|
|
}
|
|
|
|
.item:hover {
|
|
background-color: #3c3836;
|
|
}
|
|
|
|
.item .icon {
|
|
margin-right: 12px;
|
|
min-width: 32px;
|
|
}
|
|
|
|
.item .text {
|
|
font-weight: normal;
|
|
}
|
|
|
|
.item .sub {
|
|
font-size: 12px;
|
|
color: #a89984;
|
|
}
|
|
'';
|
|
|
|
environment.etc."omnixy/walker/themes/nord.css".text = ''
|
|
* {
|
|
color: #eceff4;
|
|
background-color: #2e3440;
|
|
font-family: "JetBrainsMono Nerd Font", monospace;
|
|
font-size: 14px;
|
|
}
|
|
|
|
window {
|
|
background-color: rgba(46, 52, 64, 0.95);
|
|
border: 2px solid #4c566a;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
#search {
|
|
background-color: #3b4252;
|
|
border: 1px solid #4c566a;
|
|
border-radius: 8px;
|
|
padding: 8px 12px;
|
|
margin: 12px;
|
|
color: #eceff4;
|
|
}
|
|
|
|
#search:focus {
|
|
border-color: #5e81ac;
|
|
}
|
|
|
|
#list {
|
|
background-color: transparent;
|
|
padding: 0 12px 12px 12px;
|
|
}
|
|
|
|
.item {
|
|
padding: 8px 12px;
|
|
border-radius: 6px;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.item:selected {
|
|
background-color: #434c5e;
|
|
color: #eceff4;
|
|
}
|
|
|
|
.item:hover {
|
|
background-color: #3b4252;
|
|
}
|
|
|
|
.item .icon {
|
|
margin-right: 12px;
|
|
min-width: 32px;
|
|
}
|
|
|
|
.item .text {
|
|
font-weight: normal;
|
|
}
|
|
|
|
.item .sub {
|
|
font-size: 12px;
|
|
color: #81a1c1;
|
|
}
|
|
'';
|
|
|
|
environment.etc."omnixy/walker/themes/catppuccin.css".text = ''
|
|
* {
|
|
color: #cdd6f4;
|
|
background-color: #1e1e2e;
|
|
font-family: "JetBrainsMono Nerd Font", monospace;
|
|
font-size: 14px;
|
|
}
|
|
|
|
window {
|
|
background-color: rgba(30, 30, 46, 0.95);
|
|
border: 2px solid #6c7086;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
#search {
|
|
background-color: #313244;
|
|
border: 1px solid #45475a;
|
|
border-radius: 8px;
|
|
padding: 8px 12px;
|
|
margin: 12px;
|
|
color: #cdd6f4;
|
|
}
|
|
|
|
#search:focus {
|
|
border-color: #89b4fa;
|
|
}
|
|
|
|
#list {
|
|
background-color: transparent;
|
|
padding: 0 12px 12px 12px;
|
|
}
|
|
|
|
.item {
|
|
padding: 8px 12px;
|
|
border-radius: 6px;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.item:selected {
|
|
background-color: #45475a;
|
|
color: #cdd6f4;
|
|
}
|
|
|
|
.item:hover {
|
|
background-color: #313244;
|
|
}
|
|
|
|
.item .icon {
|
|
margin-right: 12px;
|
|
min-width: 32px;
|
|
}
|
|
|
|
.item .text {
|
|
font-weight: normal;
|
|
}
|
|
|
|
.item .sub {
|
|
font-size: 12px;
|
|
color: #89dceb;
|
|
}
|
|
'';
|
|
|
|
environment.etc."omnixy/walker/themes/tokyo-night.css".text = ''
|
|
* {
|
|
color: #c0caf5;
|
|
background-color: #1a1b26;
|
|
font-family: "JetBrainsMono Nerd Font", monospace;
|
|
font-size: 14px;
|
|
}
|
|
|
|
window {
|
|
background-color: rgba(26, 27, 38, 0.95);
|
|
border: 2px solid #414868;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
#search {
|
|
background-color: #24283b;
|
|
border: 1px solid #414868;
|
|
border-radius: 8px;
|
|
padding: 8px 12px;
|
|
margin: 12px;
|
|
color: #c0caf5;
|
|
}
|
|
|
|
#search:focus {
|
|
border-color: #7aa2f7;
|
|
}
|
|
|
|
#list {
|
|
background-color: transparent;
|
|
padding: 0 12px 12px 12px;
|
|
}
|
|
|
|
.item {
|
|
padding: 8px 12px;
|
|
border-radius: 6px;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
.item:selected {
|
|
background-color: #414868;
|
|
color: #c0caf5;
|
|
}
|
|
|
|
.item:hover {
|
|
background-color: #24283b;
|
|
}
|
|
|
|
.item .icon {
|
|
margin-right: 12px;
|
|
min-width: 32px;
|
|
}
|
|
|
|
.item .text {
|
|
font-weight: normal;
|
|
}
|
|
|
|
.item .sub {
|
|
font-size: 12px;
|
|
color: #7dcfff;
|
|
}
|
|
'';
|
|
|
|
# Add to user environment
|
|
home-manager.users.${config.omnixy.user} = {
|
|
# Set XDG config dir for Walker
|
|
xdg.configFile."walker/config.json".source =
|
|
config.environment.etc."omnixy/walker/config.json".source;
|
|
|
|
# Theme-specific CSS
|
|
xdg.configFile."walker/themes/style.css".source =
|
|
config.environment.etc."omnixy/walker/themes/${cfg.theme}.css".source;
|
|
|
|
# Add shell aliases
|
|
programs.bash.shellAliases = {
|
|
launcher = "walker";
|
|
run = "walker --modules runner";
|
|
apps = "walker --modules applications";
|
|
files = "walker --modules finder";
|
|
};
|
|
|
|
programs.zsh.shellAliases = {
|
|
launcher = "walker";
|
|
run = "walker --modules runner";
|
|
apps = "walker --modules applications";
|
|
files = "walker --modules finder";
|
|
};
|
|
|
|
programs.fish.shellAliases = {
|
|
launcher = "walker";
|
|
run = "walker --modules runner";
|
|
apps = "walker --modules applications";
|
|
files = "walker --modules finder";
|
|
};
|
|
};
|
|
|
|
# Convenience scripts are now consolidated above
|
|
};
|
|
} |