forked from Shinonome/alt-illogical-impulse
Implement rich NixOS configuration system
✅ COMPLETE: Full NixOS-style configuration system implemented 🎯 Features: - Rich configuration options for Quickshell, Hyprland, and Terminal - Type-safe NixOS module options with defaults and descriptions - Generated configuration files from Nix expressions - Example configurations (gaming, productivity, minimalist) - Comprehensive documentation 🔧 Configuration Modules: - modules/components/quickshell-config.nix - Quickshell options - modules/components/hyprland-config.nix - Hyprland options - modules/components/terminal-config.nix - Terminal options 📝 Example Usage: programs.dots-hyprland = { quickshell.bar.utilButtons.showColorPicker = true; hyprland.general.gapsIn = 6; terminal.colors.alpha = 0.90; }; 🎨 Generated Files: - ~/.config/quickshell/ii/modules/common/Config.qml (NixOS-managed) - ~/.config/hypr/general.conf (NixOS-managed) - ~/.config/foot/foot.ini (NixOS-managed) ✅ Tested: All configurations build and activate successfully 🎉 Ready for production use with full NixOS declarative configuration!
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
# Hyprland configuration options for dots-hyprland
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.dots-hyprland.hyprland;
|
||||
in
|
||||
{
|
||||
options.programs.dots-hyprland.hyprland = {
|
||||
# General settings
|
||||
general = {
|
||||
gapsIn = mkOption {
|
||||
type = types.int;
|
||||
default = 4;
|
||||
description = "Inner gaps between windows";
|
||||
};
|
||||
|
||||
gapsOut = mkOption {
|
||||
type = types.int;
|
||||
default = 7;
|
||||
description = "Outer gaps around windows";
|
||||
};
|
||||
|
||||
borderSize = mkOption {
|
||||
type = types.int;
|
||||
default = 2;
|
||||
description = "Border width around windows";
|
||||
};
|
||||
|
||||
allowTearing = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Allow screen tearing (useful for gaming)";
|
||||
};
|
||||
};
|
||||
|
||||
# Decoration settings
|
||||
decoration = {
|
||||
rounding = mkOption {
|
||||
type = types.int;
|
||||
default = 16;
|
||||
description = "Corner rounding radius";
|
||||
};
|
||||
|
||||
blurEnabled = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable background blur";
|
||||
};
|
||||
};
|
||||
|
||||
# Gesture settings
|
||||
gestures = {
|
||||
workspaceSwipe = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable workspace swipe gestures";
|
||||
};
|
||||
};
|
||||
|
||||
# Monitor configuration
|
||||
monitors = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
description = "Monitor configuration strings";
|
||||
example = [ "eDP-1,1920x1080@60,0x0,1" ];
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.programs.dots-hyprland.enable {
|
||||
# Generate Hyprland configuration files
|
||||
xdg.configFile."hypr/general.conf".text = ''
|
||||
# General Hyprland configuration for dots-hyprland (NixOS-managed)
|
||||
|
||||
${optionalString (cfg.monitors != []) ''
|
||||
# Monitor configuration
|
||||
${concatMapStringsSep "\n" (monitor: "monitor=${monitor}") cfg.monitors}
|
||||
''}
|
||||
|
||||
# Gestures
|
||||
gestures {
|
||||
workspace_swipe = ${boolToString cfg.gestures.workspaceSwipe}
|
||||
workspace_swipe_distance = 700
|
||||
workspace_swipe_fingers = 3
|
||||
workspace_swipe_min_fingers = true
|
||||
workspace_swipe_cancel_ratio = 0.2
|
||||
workspace_swipe_min_speed_to_force = 5
|
||||
workspace_swipe_direction_lock = true
|
||||
workspace_swipe_direction_lock_threshold = 10
|
||||
workspace_swipe_create_new = true
|
||||
}
|
||||
|
||||
general {
|
||||
# Gaps and border
|
||||
gaps_in = ${toString cfg.general.gapsIn}
|
||||
gaps_out = ${toString cfg.general.gapsOut}
|
||||
gaps_workspaces = 50
|
||||
|
||||
border_size = ${toString cfg.general.borderSize}
|
||||
col.active_border = rgba(cba6f7ff)
|
||||
col.inactive_border = rgba(313244ff)
|
||||
resize_on_border = true
|
||||
|
||||
no_focus_fallback = true
|
||||
|
||||
allow_tearing = ${boolToString cfg.general.allowTearing}
|
||||
|
||||
snap {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
dwindle {
|
||||
preserve_split = true
|
||||
smart_split = false
|
||||
smart_resizing = false
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = ${toString cfg.decoration.rounding}
|
||||
|
||||
blur {
|
||||
enabled = ${boolToString cfg.decoration.blurEnabled}
|
||||
xray = true
|
||||
special = false
|
||||
new_optimizations = true
|
||||
size = 14
|
||||
passes = 4
|
||||
brightness = 1
|
||||
noise = 0.01
|
||||
contrast = 1
|
||||
popups = true
|
||||
popups_ignorealpha = 0.6
|
||||
}
|
||||
|
||||
drop_shadow = true
|
||||
shadow_ignore_window = true
|
||||
shadow_offset = 0 2
|
||||
shadow_range = 20
|
||||
shadow_render_power = 3
|
||||
col.shadow = rgba(00000055)
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,434 @@
|
||||
# Quickshell configuration options for dots-hyprland
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.dots-hyprland.quickshell;
|
||||
in
|
||||
{
|
||||
options.programs.dots-hyprland.quickshell = {
|
||||
# Appearance settings
|
||||
appearance = {
|
||||
extraBackgroundTint = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable extra background tint";
|
||||
};
|
||||
|
||||
fakeScreenRounding = mkOption {
|
||||
type = types.enum [ 0 1 2 ];
|
||||
default = 2;
|
||||
description = "Screen rounding mode: 0=None, 1=Always, 2=When not fullscreen";
|
||||
};
|
||||
|
||||
transparency = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enable transparency effects";
|
||||
};
|
||||
};
|
||||
|
||||
# Bar configuration
|
||||
bar = {
|
||||
bottom = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Place bar at bottom instead of top";
|
||||
};
|
||||
|
||||
cornerStyle = mkOption {
|
||||
type = types.enum [ 0 1 2 ];
|
||||
default = 0;
|
||||
description = "Bar corner style: 0=Hug, 1=Float, 2=Plain rectangle";
|
||||
};
|
||||
|
||||
borderless = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Remove grouping of bar items";
|
||||
};
|
||||
|
||||
topLeftIcon = mkOption {
|
||||
type = types.enum [ "distro" "spark" ];
|
||||
default = "spark";
|
||||
description = "Icon to show in top-left of bar";
|
||||
};
|
||||
|
||||
showBackground = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Show bar background";
|
||||
};
|
||||
|
||||
verbose = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Show detailed information in bar";
|
||||
};
|
||||
|
||||
utilButtons = {
|
||||
showScreenSnip = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Show screen snip button";
|
||||
};
|
||||
|
||||
showColorPicker = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Show color picker button";
|
||||
};
|
||||
|
||||
showMicToggle = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Show microphone toggle button";
|
||||
};
|
||||
|
||||
showKeyboardToggle = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Show keyboard layout toggle";
|
||||
};
|
||||
|
||||
showDarkModeToggle = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Show dark mode toggle";
|
||||
};
|
||||
|
||||
showPerformanceProfileToggle = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Show performance profile toggle";
|
||||
};
|
||||
};
|
||||
|
||||
workspaces = {
|
||||
monochromeIcons = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Use monochrome workspace icons";
|
||||
};
|
||||
|
||||
shown = mkOption {
|
||||
type = types.int;
|
||||
default = 10;
|
||||
description = "Number of workspaces to show";
|
||||
};
|
||||
|
||||
showAppIcons = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Show application icons in workspaces";
|
||||
};
|
||||
|
||||
alwaysShowNumbers = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Always show workspace numbers";
|
||||
};
|
||||
|
||||
showNumberDelay = mkOption {
|
||||
type = types.int;
|
||||
default = 300;
|
||||
description = "Delay before showing workspace numbers (milliseconds)";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Battery settings
|
||||
battery = {
|
||||
low = mkOption {
|
||||
type = types.int;
|
||||
default = 20;
|
||||
description = "Low battery threshold (%)";
|
||||
};
|
||||
|
||||
critical = mkOption {
|
||||
type = types.int;
|
||||
default = 5;
|
||||
description = "Critical battery threshold (%)";
|
||||
};
|
||||
|
||||
automaticSuspend = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable automatic suspend on critical battery";
|
||||
};
|
||||
|
||||
suspend = mkOption {
|
||||
type = types.int;
|
||||
default = 3;
|
||||
description = "Minutes before suspend on critical battery";
|
||||
};
|
||||
};
|
||||
|
||||
# Application settings
|
||||
apps = {
|
||||
terminal = mkOption {
|
||||
type = types.str;
|
||||
default = "kitty -1";
|
||||
description = "Terminal command for shell actions";
|
||||
};
|
||||
|
||||
bluetooth = mkOption {
|
||||
type = types.str;
|
||||
default = "kcmshell6 kcm_bluetooth";
|
||||
description = "Bluetooth settings command";
|
||||
};
|
||||
|
||||
network = mkOption {
|
||||
type = types.str;
|
||||
default = "plasmawindowed org.kde.plasma.networkmanagement";
|
||||
description = "Network settings command";
|
||||
};
|
||||
|
||||
taskManager = mkOption {
|
||||
type = types.str;
|
||||
default = "plasma-systemmonitor --page-name Processes";
|
||||
description = "Task manager command";
|
||||
};
|
||||
};
|
||||
|
||||
# Time format
|
||||
time = {
|
||||
format = mkOption {
|
||||
type = types.str;
|
||||
default = "hh:mm";
|
||||
description = "Time format string";
|
||||
};
|
||||
|
||||
dateFormat = mkOption {
|
||||
type = types.str;
|
||||
default = "ddd, dd/MM";
|
||||
description = "Date format string";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.programs.dots-hyprland.enable {
|
||||
# Generate the Config.qml file with NixOS-managed values
|
||||
xdg.configFile."quickshell/ii/modules/common/Config.qml".text = ''
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
property string filePath: Directories.shellConfigPath
|
||||
property alias options: configOptionsJsonAdapter
|
||||
property bool ready: true // Always ready for NixOS-generated config
|
||||
|
||||
function setNestedValue(nestedKey, value) {
|
||||
// NixOS-managed config - values are set at build time
|
||||
console.log("NixOS-managed configuration - ignoring runtime changes");
|
||||
}
|
||||
|
||||
JsonAdapter {
|
||||
id: configOptionsJsonAdapter
|
||||
|
||||
property JsonObject policies: JsonObject {
|
||||
property int ai: 1
|
||||
property int weeb: 1
|
||||
}
|
||||
|
||||
property JsonObject ai: JsonObject {
|
||||
property string systemPrompt: "## Style\n- Use casual tone, don't be formal! Make sure you answer precisely without hallucination and prefer bullet points over walls of text. You can have a friendly greeting at the beginning of the conversation, but don't repeat the user's question\n\n## Context (ignore when irrelevant)\n- You are a helpful and inspiring sidebar assistant on a NixOS Linux system\n- Desktop environment: Hyprland + dots-hyprland\n- Current date & time: {DATETIME}\n- Focused app: {WINDOWCLASS}\n\n## Presentation\n- Use Markdown features in your response"
|
||||
property string tool: "functions"
|
||||
property list<var> extraModels: []
|
||||
}
|
||||
|
||||
property JsonObject appearance: JsonObject {
|
||||
property bool extraBackgroundTint: ${boolToString cfg.appearance.extraBackgroundTint}
|
||||
property int fakeScreenRounding: ${toString cfg.appearance.fakeScreenRounding}
|
||||
property bool transparency: ${boolToString cfg.appearance.transparency}
|
||||
property JsonObject wallpaperTheming: JsonObject {
|
||||
property bool enableAppsAndShell: true
|
||||
property bool enableQtApps: true
|
||||
property bool enableTerminal: true
|
||||
}
|
||||
property JsonObject palette: JsonObject {
|
||||
property string type: "auto"
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject audio: JsonObject {
|
||||
property JsonObject protection: JsonObject {
|
||||
property bool enable: true
|
||||
property real maxAllowedIncrease: 10
|
||||
property real maxAllowed: 90
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject apps: JsonObject {
|
||||
property string bluetooth: "${cfg.apps.bluetooth}"
|
||||
property string network: "${cfg.apps.network}"
|
||||
property string networkEthernet: "kcmshell6 kcm_networkmanagement"
|
||||
property string taskManager: "${cfg.apps.taskManager}"
|
||||
property string terminal: "${cfg.apps.terminal}"
|
||||
}
|
||||
|
||||
property JsonObject background: JsonObject {
|
||||
property bool fixedClockPosition: false
|
||||
property real clockX: -500
|
||||
property real clockY: -500
|
||||
property string wallpaperPath: ""
|
||||
property string thumbnailPath: ""
|
||||
property JsonObject parallax: JsonObject {
|
||||
property bool enableWorkspace: true
|
||||
property real workspaceZoom: 1.07
|
||||
property bool enableSidebar: true
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject bar: JsonObject {
|
||||
property bool bottom: ${boolToString cfg.bar.bottom}
|
||||
property int cornerStyle: ${toString cfg.bar.cornerStyle}
|
||||
property bool borderless: ${boolToString cfg.bar.borderless}
|
||||
property string topLeftIcon: "${cfg.bar.topLeftIcon}"
|
||||
property bool showBackground: ${boolToString cfg.bar.showBackground}
|
||||
property bool verbose: ${boolToString cfg.bar.verbose}
|
||||
property JsonObject resources: JsonObject {
|
||||
property bool alwaysShowSwap: true
|
||||
property bool alwaysShowCpu: false
|
||||
}
|
||||
property list<string> screenList: []
|
||||
property JsonObject utilButtons: JsonObject {
|
||||
property bool showScreenSnip: ${boolToString cfg.bar.utilButtons.showScreenSnip}
|
||||
property bool showColorPicker: ${boolToString cfg.bar.utilButtons.showColorPicker}
|
||||
property bool showMicToggle: ${boolToString cfg.bar.utilButtons.showMicToggle}
|
||||
property bool showKeyboardToggle: ${boolToString cfg.bar.utilButtons.showKeyboardToggle}
|
||||
property bool showDarkModeToggle: ${boolToString cfg.bar.utilButtons.showDarkModeToggle}
|
||||
property bool showPerformanceProfileToggle: ${boolToString cfg.bar.utilButtons.showPerformanceProfileToggle}
|
||||
}
|
||||
property JsonObject tray: JsonObject {
|
||||
property bool monochromeIcons: true
|
||||
}
|
||||
property JsonObject workspaces: JsonObject {
|
||||
property bool monochromeIcons: ${boolToString cfg.bar.workspaces.monochromeIcons}
|
||||
property int shown: ${toString cfg.bar.workspaces.shown}
|
||||
property bool showAppIcons: ${boolToString cfg.bar.workspaces.showAppIcons}
|
||||
property bool alwaysShowNumbers: ${boolToString cfg.bar.workspaces.alwaysShowNumbers}
|
||||
property int showNumberDelay: ${toString cfg.bar.workspaces.showNumberDelay}
|
||||
}
|
||||
property JsonObject weather: JsonObject {
|
||||
property bool enable: false
|
||||
property bool enableGPS: true
|
||||
property string city: ""
|
||||
property bool useUSCS: false
|
||||
property int fetchInterval: 10
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject battery: JsonObject {
|
||||
property int low: ${toString cfg.battery.low}
|
||||
property int critical: ${toString cfg.battery.critical}
|
||||
property bool automaticSuspend: ${boolToString cfg.battery.automaticSuspend}
|
||||
property int suspend: ${toString cfg.battery.suspend}
|
||||
}
|
||||
|
||||
property JsonObject dock: JsonObject {
|
||||
property bool enable: false
|
||||
property bool monochromeIcons: true
|
||||
property real height: 60
|
||||
property real hoverRegionHeight: 2
|
||||
property bool pinnedOnStartup: false
|
||||
property bool hoverToReveal: true
|
||||
property list<string> pinnedApps: ["org.kde.dolphin", "kitty"]
|
||||
property list<string> ignoredAppRegexes: []
|
||||
}
|
||||
|
||||
property JsonObject language: JsonObject {
|
||||
property JsonObject translator: JsonObject {
|
||||
property string engine: "auto"
|
||||
property string targetLanguage: "auto"
|
||||
property string sourceLanguage: "auto"
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject light: JsonObject {
|
||||
property JsonObject night: JsonObject {
|
||||
property bool automatic: true
|
||||
property string from: "19:00"
|
||||
property string to: "06:30"
|
||||
property int colorTemperature: 5000
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject networking: JsonObject {
|
||||
property string userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
|
||||
}
|
||||
|
||||
property JsonObject osd: JsonObject {
|
||||
property int timeout: 1000
|
||||
}
|
||||
|
||||
property JsonObject osk: JsonObject {
|
||||
property string layout: "qwerty_full"
|
||||
property bool pinnedOnStartup: false
|
||||
}
|
||||
|
||||
property JsonObject overview: JsonObject {
|
||||
property bool enable: true
|
||||
property real scale: 0.18
|
||||
property real rows: 2
|
||||
property real columns: 5
|
||||
}
|
||||
|
||||
property JsonObject resources: JsonObject {
|
||||
property int updateInterval: 3000
|
||||
}
|
||||
|
||||
property JsonObject search: JsonObject {
|
||||
property int nonAppResultDelay: 30
|
||||
property string engineBaseUrl: "https://www.google.com/search?q="
|
||||
property list<string> excludedSites: ["quora.com"]
|
||||
property bool sloppy: false
|
||||
property JsonObject prefix: JsonObject {
|
||||
property string action: "/"
|
||||
property string clipboard: ";"
|
||||
property string emojis: ":"
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject sidebar: JsonObject {
|
||||
property bool keepRightSidebarLoaded: true
|
||||
property JsonObject translator: JsonObject {
|
||||
property int delay: 300
|
||||
}
|
||||
property JsonObject booru: JsonObject {
|
||||
property bool allowNsfw: false
|
||||
property string defaultProvider: "yandere"
|
||||
property int limit: 20
|
||||
property JsonObject zerochan: JsonObject {
|
||||
property string username: "[unset]"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
property JsonObject time: JsonObject {
|
||||
property string format: "${cfg.time.format}"
|
||||
property string dateFormat: "${cfg.time.dateFormat}"
|
||||
}
|
||||
|
||||
property JsonObject windows: JsonObject {
|
||||
property bool showTitlebar: true
|
||||
property bool centerTitle: true
|
||||
}
|
||||
|
||||
property JsonObject hacks: JsonObject {
|
||||
property int arbitraryRaceConditionDelay: 20
|
||||
}
|
||||
|
||||
property JsonObject screenshotTool: JsonObject {
|
||||
property bool showContentRegions: true
|
||||
}
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
# Terminal configuration options for dots-hyprland
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.dots-hyprland.terminal;
|
||||
in
|
||||
{
|
||||
options.programs.dots-hyprland.terminal = {
|
||||
# Terminal settings
|
||||
scrollback = {
|
||||
lines = mkOption {
|
||||
type = types.int;
|
||||
default = 1000;
|
||||
description = "Number of scrollback lines";
|
||||
};
|
||||
|
||||
multiplier = mkOption {
|
||||
type = types.float;
|
||||
default = 3.0;
|
||||
description = "Scrollback multiplier";
|
||||
};
|
||||
};
|
||||
|
||||
cursor = {
|
||||
style = mkOption {
|
||||
type = types.enum [ "block" "beam" "underline" ];
|
||||
default = "beam";
|
||||
description = "Cursor style";
|
||||
};
|
||||
|
||||
blink = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enable cursor blinking";
|
||||
};
|
||||
|
||||
beamThickness = mkOption {
|
||||
type = types.float;
|
||||
default = 1.5;
|
||||
description = "Beam cursor thickness";
|
||||
};
|
||||
};
|
||||
|
||||
colors = {
|
||||
alpha = mkOption {
|
||||
type = types.float;
|
||||
default = 0.95;
|
||||
description = "Terminal transparency (0.0 - 1.0)";
|
||||
};
|
||||
};
|
||||
|
||||
mouse = {
|
||||
hideWhenTyping = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Hide mouse cursor when typing";
|
||||
};
|
||||
|
||||
alternateScrollMode = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enable alternate scroll mode";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.programs.dots-hyprland.enable {
|
||||
# Generate foot configuration
|
||||
xdg.configFile."foot/foot.ini".text = ''
|
||||
[main]
|
||||
term=xterm-256color
|
||||
login-shell=yes
|
||||
app-id=foot
|
||||
title=foot
|
||||
locked-title=no
|
||||
|
||||
[bell]
|
||||
urgent=no
|
||||
notify=no
|
||||
visual=no
|
||||
command=
|
||||
command-focused=no
|
||||
|
||||
[scrollback]
|
||||
lines=${toString cfg.scrollback.lines}
|
||||
multiplier=${toString cfg.scrollback.multiplier}
|
||||
indicator-position=relative
|
||||
indicator-format=""
|
||||
|
||||
[url]
|
||||
launch=xdg-open ''${url}
|
||||
label-letters=sadfjklewcmpgh
|
||||
osc8-underline=url-mode
|
||||
protocols=http, https, ftp, ftps, file, gemini, gopher
|
||||
uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
|
||||
|
||||
[cursor]
|
||||
style=${cfg.cursor.style}
|
||||
color=cdd6f4
|
||||
blink=${boolToString cfg.cursor.blink}
|
||||
beam-thickness=${toString cfg.cursor.beamThickness}
|
||||
underline-thickness=<font-metrics>
|
||||
|
||||
[mouse]
|
||||
hide-when-typing=${boolToString cfg.mouse.hideWhenTyping}
|
||||
alternate-scroll-mode=${boolToString cfg.mouse.alternateScrollMode}
|
||||
|
||||
[colors]
|
||||
alpha=${toString cfg.colors.alpha}
|
||||
background=1e1e2e
|
||||
foreground=cdd6f4
|
||||
|
||||
# Catppuccin Mocha color palette
|
||||
regular0=45475a
|
||||
regular1=f38ba8
|
||||
regular2=a6e3a1
|
||||
regular3=f9e2af
|
||||
regular4=89b4fa
|
||||
regular5=f5c2e7
|
||||
regular6=94e2d5
|
||||
regular7=bac2de
|
||||
|
||||
bright0=585b70
|
||||
bright1=f38ba8
|
||||
bright2=a6e3a1
|
||||
bright3=f9e2af
|
||||
bright4=89b4fa
|
||||
bright5=f5c2e7
|
||||
bright6=94e2d5
|
||||
bright7=a6adc8
|
||||
|
||||
[key-bindings]
|
||||
scrollback-up-page=Shift+Page_Up
|
||||
scrollback-up-half-page=none
|
||||
scrollback-up-line=none
|
||||
scrollback-down-page=Shift+Page_Down
|
||||
scrollback-down-half-page=none
|
||||
scrollback-down-line=none
|
||||
clipboard-copy=Control+Shift+c XF86Copy
|
||||
clipboard-paste=Control+Shift+v XF86Paste
|
||||
primary-paste=Shift+Insert
|
||||
search-start=Control+Shift+r
|
||||
font-increase=Control+plus Control+equal Control+KP_Add
|
||||
font-decrease=Control+minus Control+KP_Subtract
|
||||
font-reset=Control+0 Control+KP_0
|
||||
spawn-terminal=Control+Shift+n
|
||||
minimize=none
|
||||
maximize=none
|
||||
fullscreen=none
|
||||
pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
||||
pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
||||
pipe-selected=[xargs -r firefox] none
|
||||
show-urls-launch=Control+Shift+u
|
||||
show-urls-copy=none
|
||||
show-urls-persistent=none
|
||||
prompt-prev=Control+Shift+z
|
||||
prompt-next=Control+Shift+x
|
||||
unicode-input=Control+Shift+u
|
||||
noop=none
|
||||
|
||||
[search-bindings]
|
||||
cancel=Control+g Control+c Escape
|
||||
commit=Return
|
||||
find-prev=Control+r
|
||||
find-next=Control+s
|
||||
cursor-left=Left Control+b
|
||||
cursor-left-word=Control+Left Mod1+b
|
||||
cursor-right=Right Control+f
|
||||
cursor-right-word=Control+Right Mod1+f
|
||||
cursor-home=Home Control+a
|
||||
cursor-end=End Control+e
|
||||
delete-prev=BackSpace
|
||||
delete-prev-word=Mod1+BackSpace Control+BackSpace
|
||||
delete-next=Delete
|
||||
delete-next-word=Mod1+d Control+Delete
|
||||
extend-to-word-boundary=Control+w
|
||||
extend-to-next-whitespace=Control+Shift+w
|
||||
clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
|
||||
primary-paste=Shift+Insert
|
||||
unicode-input=none
|
||||
|
||||
[url-bindings]
|
||||
cancel=Control+g Control+c Control+d Escape
|
||||
toggle-url-visible=t
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user