Compare commits

...

4 Commits

Author SHA1 Message Date
23acb87339 modules/home/programs/terminal/wezterm.nix: fix, refactor
modules/home/programs/shell/oh-my-posh.nix: fix, refactor

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-03-31 16:45:24 +03:00
d4849e9319 modules/home/desktop/hyprland/default.nix: small refactor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-03-31 16:45:24 +03:00
a86f3f9c15 hosts/dunamis/users/user/programs.nix: move to wezterm
modules/home/desktop/niri/default.nix: move to wezterm

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-03-31 16:45:24 +03:00
386d3f9007 add joshuto file manager
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-03-31 16:45:24 +03:00
8 changed files with 352 additions and 38 deletions

View File

@ -5,6 +5,7 @@
};
console.yazi.enable = true;
console.joshuto.enable = true;
stylix.targets.fzf.enable = false;
services.ssh-agent.enable = true;
@ -43,7 +44,8 @@
};
terminal = {
ghostty.enable = true;
# ghostty.enable = true;
wezterm.enable = true;
kitty.enable = true;
};

View File

@ -8,7 +8,8 @@
}: let
cfg = config.desktop.hyprland;
hostname = osConfig.networking.hostName;
cursor_size = config.stylix.cursor.size;
cursorSize = config.stylix.cursor.size;
fontName = config.stylix.fonts.sansSerif.name;
inherit (config.lib.stylix) colors;
keyboard =
if hostname == "eldrid"
@ -25,8 +26,9 @@ in {
config = lib.mkIf cfg.enable {
stylix.targets.waybar.enable = false;
stylix.targets.hyprland.enable = false;
stylix.targets.hyprlock.enable = false;
home.pointerCursor.hyprcursor.enable = true;
home.pointerCursor.hyprcursor.size = cursor_size;
home.pointerCursor.hyprcursor.size = cursorSize;
wayland.windowManager.hyprland = {
enable = true;
systemd = {
@ -83,7 +85,7 @@ in {
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,gtk3"
"XCURSOR_SIZE,${toString cursor_size}"
"XCURSORSIZE,${toString cursorSize}"
"GSK_RENDERER,ngl"
];
decoration = {
@ -98,7 +100,7 @@ in {
rounding = 12;
};
misc = {
font_family = "${config.stylix.fonts.sansSerif.name}";
font_family = fontName;
disable_splash_rendering = true;
disable_hyprland_logo = true;
# vfr = true;
@ -145,7 +147,7 @@ in {
rounding = 8;
text_height = 14;
text_center = true;
text_font = "${config.stylix.fonts.sansSerif.name}";
text_font = fontName;
"col.active" = "0xff${colors.base00}";
"col.inactive" = "0xff${colors.base00}";
@ -165,7 +167,7 @@ in {
window_heights = "onethird onehalf twothirds one";
gesture_scroll_fingers = 3;
gesture_overview_fingers = 3;
jump_labels_font = "${config.stylix.fonts.sansSerif.name}";
jump_labels_font = fontName;
jump_labels_color = "0xff${colors.base0A}";
};
}
@ -217,7 +219,7 @@ in {
gradient_rounding = 4;
font_size = 14;
gradients = true;
font_family = "${config.stylix.fonts.sansSerif.name}";
font_family = fontName;
"text_color" = "0xff${colors.base00}";
"col.active" = "0xff${colors.base0D}";
"col.inactive" = "0xff${colors.base03}";
@ -701,7 +703,7 @@ in {
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
* {
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome;
font-family: ${fontName}, FontAwesome;
font-weight: 500;
font-size: 100%;
}
@ -1029,7 +1031,6 @@ in {
};
};
};
stylix.targets.hyprlock.enable = false;
programs.hyprlock = {
enable = true;
settings = {
@ -1065,7 +1066,6 @@ in {
fail_color = "rgb(${colors.base08})";
placeholder_text = "locked...";
fail_text = "wrong";
#placeholder_text = '\'<span foreground="##cad3f5">Password...</span>'\';
shadow_passes = 0;
}
];

View File

@ -16,7 +16,8 @@
xdgPics =
config.xdg.userDirs.pictures;
ifLaptop = lib.mkIf (hostId != "c7f6c4a1");
terminal = lib.getExe pkgs.ghostty;
# TODO: make terminal depent on thing outside a module
terminal = lib.getExe pkgs.wezterm;
launcher = lib.getExe pkgs.fuzzel;
browser = "app.zen_browser.zen";
lockscreen = lib.getExe pkgs.gtklock;

View File

@ -0,0 +1,6 @@
{
imports = [
./joshuto.nix
./yazi.nix
];
}

View File

@ -0,0 +1,292 @@
{
pkgs,
config,
lib,
...
}:
with lib; let
cfg = config.console.joshuto;
in {
options = {
console.joshuto.enable =
mkEnableOption "enable joshuto file manager";
};
config =
# let
# test = pkgs.writeShellApplication {
# name = "upgrade";
# text = ''
# IFS=$'\n'
# # Security measures:
# # * noclobber prevents you from overwriting a file with `>`
# # * noglob prevents expansion of wild cards
# # * nounset causes bash to fail if an undeclared variable is used (e.g. typos)
# # * pipefail causes a pipeline to fail also if a command other than the last one fails
# set -o noclobber -o noglob -o nounset -o pipefail
# # Enable exiftool large file support
# shopt -s expand_aliases
# alias exiftool='exiftool -api largefilesupport=1'
# FILE_PATH=""
# PREVIEW_WIDTH=10
# PREVIEW_HEIGHT=10
# while [ "$#" -gt 0 ]; do
# case "$1" in
# "--path")
# shift
# FILE_PATH="$1"
# ;;
# "--preview-width")
# shift
# PREVIEW_WIDTH="$1"
# ;;
# "--preview-height")
# shift
# PREVIEW_HEIGHT="$1"
# ;;
# esac
# shift
# done
# handle_extension() {
# case "\$\{FILE_EXTENSION_LOWER}" in
# ## Archive
# a | ace | alz | arc | arj | bz | bz2 | cab | cpio | deb | gz | jar | lha | lz | lzh | lzma | lzo | \
# rpm | rz | t7z | tar | tbz | tbz2 | tgz | tlz | txz | tZ | tzo | war | xpi | xz | Z | zip)
# atool --list -- "\$\{FILE_PATH}" && exit 0
# bsdtar --list --file "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# rar)
# ## Avoid password prompt by providing empty password
# unrar lt -p- -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# 7z)
# ## Avoid password prompt by providing empty password
# 7z l -p -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## PDF
# pdf)
# ## Preview as text conversion
# pdftotext -l 10 -nopgbrk -q -- "\$\{FILE_PATH}" - |
# fmt -w "\$\{PREVIEW_WIDTH}" && exit 0
# mutool draw -F txt -i -- "\$\{FILE_PATH}" 1-10 |
# fmt -w "\$\{PREVIEW_WIDTH}" && exit 0
# exiftool "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## BitTorrent
# torrent)
# transmission-show -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## OpenDocument
# odt | sxw)
# ## Preview as text conversion
# odt2txt "\$\{FILE_PATH}" && exit 0
# ## Preview as markdown conversion
# pandoc -s -t markdown -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ods | odp)
# ## Preview as text conversion (unsupported by pandoc for markdown)
# odt2txt "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## XLSX
# xlsx)
# ## Preview as csv conversion
# ## Uses: https://github.com/dilshod/xlsx2csv
# xlsx2csv -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## HTML
# htm | html | xhtml)
# ## Preview as text conversion
# w3m -dump "\$\{FILE_PATH}" && exit 0
# lynx -dump -- "\$\{FILE_PATH}" && exit 0
# elinks -dump "\$\{FILE_PATH}" && exit 0
# pandoc -s -t markdown -- "\$\{FILE_PATH}" && exit 0
# bat --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" \
# "\$\{FILE_PATH}" && exit 0
# ;;
# ## JSON
# json | ipynb)
# jq --color-output . "\$\{FILE_PATH}" && exit 0
# python -m json.tool -- "\$\{FILE_PATH}" && exit 0
# bat --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" \
# "\$\{FILE_PATH}" && exit 0
# ;;
# ## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
# ## by file(1).
# dff | dsf | wv | wvc)
# mediainfo "\$\{FILE_PATH}" && exit 0
# exiftool "\$\{FILE_PATH}" && exit 0
# ;; # Continue with next handler on failure
# esac
# }
# handle_mime() {
# local mimetype="\$\{1}"
# case "\$\{mimetype}" in
# ## RTF and DOC
# text/rtf | *msword)
# ## Preview as text conversion
# ## note: catdoc does not always work for .doc files
# ## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
# catdoc -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## DOCX, ePub, FB2 (using markdown)
# ## You might want to remove "|epub" and/or "|fb2" below if you have
# ## uncommented other methods to preview those formats
# *wordprocessingml.document | */epub+zip | */x-fictionbook+xml)
# ## Preview as markdown conversion
# pandoc -s -t markdown -- "\$\{FILE_PATH}" | bat -l markdown \
# --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" && exit 0
# exit 1
# ;;
# ## E-mails
# message/rfc822)
# ## Parsing performed by mu: https://github.com/djcb/mu
# mu view -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## XLS
# *ms-excel)
# ## Preview as csv conversion
# ## xls2csv comes with catdoc:
# ## http://www.wagner.pp.ru/~vitus/software/catdoc/
# xls2csv -- "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## Text
# text/* | */xml)
# bat --color=always --paging=never \
# --style=plain \
# --terminal-width="\$\{PREVIEW_WIDTH}" \
# "\$\{FILE_PATH}" && exit 0
# cat "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## DjVu
# image/vnd.djvu)
# ## Preview as text conversion (requires djvulibre)
# djvutxt "\$\{FILE_PATH}" | fmt -w "\$\{PREVIEW_WIDTH}" && exit 0
# exiftool "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## Image
# image/*)
# ## Preview as text conversion
# exiftool "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# ## Video and audio
# video/* | audio/*)
# mediainfo "\$\{FILE_PATH}" && exit 0
# exiftool "\$\{FILE_PATH}" && exit 0
# exit 1
# ;;
# esac
# }
# FILE_EXTENSION="\$\{FILE_PATH##*.}"
# FILE_EXTENSION_LOWER="$(printf "%s" "\$\{FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
# handle_extension
# MIMETYPE="$(file --dereference --brief --mime-type -- "\$\{FILE_PATH}")"
# handle_mime "\$\{MIMETYPE}"
# exit 1
# '';
# };
# in
lib.mkIf cfg.enable {
home.packages = [pkgs.file];
programs.joshuto = {
enable = true;
settings = {
mouse_support = true;
focus_on_create = true;
use_trash = true;
watch_files = true;
xdg_open = true;
xdg_open_fork = true;
case_insensitive_ext = false;
# zoxide_update = true;
display = {
mode = "minimal";
show_icons = true;
column_ratio = [1 5 2];
};
preview = {
# preview_script = lib.getExe pkgs.pistol;
use_xdg_thumbs = true;
xdg_thumb_size = "xxlarge";
};
};
mimetype = {
class = {
text_default = [
{
command = "hx";
}
];
};
extension = {
build."inherit" = "text_default";
c."inherit" = "text_default";
cmake."inherit" = "text_default";
conf."inherit" = "text_default";
cpp."inherit" = "text_default";
css."inherit" = "text_default";
csv."inherit" = "text_default";
cu."inherit" = "text_default";
ebuild."inherit" = "text_default";
eex."inherit" = "text_default";
env."inherit" = "text_default";
ex."inherit" = "text_default";
exs."inherit" = "text_default";
go."inherit" = "text_default";
h."inherit" = "text_default";
hpp."inherit" = "text_default";
hs."inherit" = "text_default";
html."inherit" = "text_default";
ini."inherit" = "text_default";
java."inherit" = "text_default";
js."inherit" = "text_default";
json."inherit" = "text_default";
kt."inherit" = "text_default";
log."inherit" = "text_default";
lua."inherit" = "text_default";
md."inherit" = "text_default";
micro."inherit" = "text_default";
ninja."inherit" = "text_default";
nix."inherit" = "text_default";
norg."inherit" = "text_default";
org."inherit" = "text_default";
py."inherit" = "text_default";
rkt."inherit" = "text_default";
rs."inherit" = "text_default";
scss."inherit" = "text_default";
sh."inherit" = "text_default";
srt."inherit" = "text_default";
svelte."inherit" = "text_default";
toml."inherit" = "text_default";
tsx."inherit" = "text_default";
txt."inherit" = "text_default";
vim."inherit" = "text_default";
xml."inherit" = "text_default";
yaml."inherit" = "text_default";
yml."inherit" = "text_default";
};
mimetype = {
text = {"inherit" = "text_default";};
};
};
};
};
}

View File

@ -1,6 +1,6 @@
{
imports = [
./console/yazi.nix
./console
./editor
./shell
./terminal

View File

@ -17,7 +17,7 @@ in {
# version = 2;
final_space = true;
shell_integration = true;
console_title_template = "{{if .SSHSession}}{{.HostName}} {{ end }}{{ .Shell }} in {{ .Folder }}";
console_title_template = "{{ .Shell }} in {{ .Folder }}";
blocks = [
{
type = "prompt";

View File

@ -16,7 +16,30 @@ in {
programs.wezterm = {
enable = true;
# package = inputs.wezterm.packages.${pkgs.system}.default;
extraConfig = ''
extraConfig = let
arrows = {
left = "LeftArrow";
down = "DownArrow";
up = "UpArrow";
right = "RightArrow";
};
homerow-arrows = {
left = "n";
down = "e";
up = "i";
right = "o";
};
genNavigation = keys: ''
{ key = '${keys.left}', mods = 'LEADER', action = act.ActivatePaneDirection 'Left' },
{ key = '${keys.down}', mods = 'LEADER', action = act.ActivatePaneDirection 'Down' },
{ key = '${keys.up}', mods = 'LEADER', action = act.ActivatePaneDirection 'Up' },
{ key = '${keys.right}', mods = 'LEADER', action = act.ActivatePaneDirection 'Right' },
{ key = '${keys.left}', mods = 'CTRL|SHIFT', action = act.ActivatePaneDirection 'Left' },
{ key = '${keys.down}', mods = 'CTRL|SHIFT', action = act.ActivatePaneDirection 'Down' },
{ key = '${keys.up}', mods = 'CTRL|SHIFT', action = act.ActivatePaneDirection 'Up' },
{ key = '${keys.right}', mods = 'CTRL|SHIFT', action = act.ActivatePaneDirection 'Right' },
'';
in ''
local wezterm = require 'wezterm'
local act = wezterm.action
return {
@ -44,10 +67,6 @@ in {
disable_default_key_bindings = true,
leader = { key = 'Space', mods = 'CTRL', timeout_milliseconds = 2000 },
keys = {
{ key = 'n', mods = 'CTRL|SHIFT', action = act.ActivateTabRelative(-1) },
{ key = 'e', mods = 'CTRL|SHIFT', action = act.ActivatePaneDirection 'Down', },
{ key = 'u', mods = 'CTRL|SHIFT', action = act.ActivatePaneDirection 'Up', },
{ key = 'i', mods = 'CTRL|SHIFT', action = act.ActivateTabRelative(1) },
{ key = 'Enter', mods = 'SHIFT|CTRL', action = act.ActivateCopyMode },
{ key = 'R', mods = 'SHIFT|CTRL', action = act.ReloadConfiguration },
{ key = '+', mods = 'SHIFT|CTRL', action = act.IncreaseFontSize },
@ -57,21 +76,15 @@ in {
-- { key = 'N', mods = 'SHIFT|CTRL', action = act.SpawnWindow },
{ key = 'l', mods = 'SHIFT|CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } },
{ key = 'v', mods = 'SHIFT|CTRL', action = act.PasteFrom 'Clipboard' },
{ key = 'PageUp', mods = 'CTRL', action = act.ActivateTabRelative(-1) },
{ key = 'PageDown', mods = 'CTRL', action = act.ActivateTabRelative(1) },
{ key = ',', mods = 'SHIFT|CTRL', action = act.SplitVertical { domain = 'CurrentPaneDomain' }, },
{ key = '.', mods = 'SHIFT|CTRL', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' }, },
{ key = '<', mods = 'CTRL|SHIFT', action = act.ActivateTabRelative(-1) },
{ key = '>', mods = 'CTRL|SHIFT', action = act.ActivateTabRelative(1) },
{ key = 'Tab', mods = 'CTRL|SHIFT', action = act.ActivateTabRelative(-1) },
{ key = 'Tab', mods = 'CTRL', action = act.ActivateTabRelative(1) },
{ key = '%', mods = 'SHIFT|CTRL', action = act.SplitVertical { domain = 'CurrentPaneDomain' }, },
{ key = '"', mods = 'SHIFT|CTRL', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' }, },
-- pane navigation
{ key = 'LeftArrow', mods = 'LEADER', action = act.ActivatePaneDirection 'Left' },
{ key = 'DownArrow', mods = 'LEADER', action = act.ActivatePaneDirection 'Down' },
{ key = 'UpArrow', mods = 'LEADER', action = act.ActivatePaneDirection 'Up' },
{ key = 'RightArrow', mods = 'LEADER', action = act.ActivatePaneDirection 'Right' },
{ key = 'n', mods = 'LEADER', action = act.ActivatePaneDirection 'Left' },
{ key = 'e', mods = 'LEADER', action = act.ActivatePaneDirection 'Down' },
{ key = 'i', mods = 'LEADER', action = act.ActivatePaneDirection 'Up' },
{ key = 'o', mods = 'LEADER', action = act.ActivatePaneDirection 'Right' },
${genNavigation arrows}
${genNavigation homerow-arrows}
{ key = 't', mods = 'SHIFT|CTRL', action = act.SpawnTab 'CurrentPaneDomain' },
{ key = 'w', mods = 'SHIFT|CTRL', action = act.CloseCurrentTab{ confirm = false } },