feat: add caleastia shell

This commit is contained in:
danny 2025-08-19 23:28:52 +08:00
parent b9a369436d
commit 146418764e
20 changed files with 926 additions and 286 deletions

View file

@ -1,22 +0,0 @@
font-family = "CaskaydiaCove Nerd Font Mono"
font-size = 15
theme = Espresso
unfocused-split-opacity = 0.85
desktop-notifications = false
wait-after-command = false
shell-integration = detect
window-theme = dark
confirm-close-surface = false
window-decoration = false
mouse-hide-while-typing = true
keybind = ctrl+shift+zero=toggle_tab_overview
clipboard-read = allow
clipboard-write = allow
# custom-shader = ./shader/mnoise.glsl
# custom-shader-animation = always

View file

@ -55,3 +55,5 @@ vim.g.clipboard = {
-- To ALWAYS use the clipboard for ALL operations
-- (instead of interacting with the "+" and/or "*" registers explicitly):
vim.opt.clipboard = "unnamedplus"
vim.g.gruvbox_material_transparent_background = 2

View file

@ -10,7 +10,8 @@
# ../user/music-production.nix
../user/nvim.nix
../user/packages.nix
../user/firefox.nix
# ../user/firefox.nix
../user/zen-browser.nix
../user/shell.nix
../user/tmux.nix
../user/virtualization.nix

View file

@ -0,0 +1,213 @@
{
config,
pkgs,
lib,
...
}:
let
patchPapirus = pkgs.stdenv.mkDerivation {
name = "${pkgs.papirus-icon-theme.name}-patch";
src = pkgs.papirus-icon-theme;
installPhase = ''
mkdir -p $out/share/icons
ln $src/share/icons/Papirus $out/share/icons/hicolor
'';
};
caelestiaDot = pkgs.fetchFromGitHub {
owner = "caelestia-dots";
repo = "caelestia";
rev = "main";
sha256 = "sha256-pRLcbh81iBp9fH3Zq7HrNtAfDD46ErGZ3wID8Q65Wlg=";
};
in
{
home.packages = with pkgs; [
cliphist
inotify-tools
app2unit
wireplumber
trash-cli
foot
fastfetch
jq
socat
imagemagick
papirus-icon-theme
nerd-fonts.jetbrains-mono
fuzzel
];
xdg.configFile = {
"hypr/hyprland".source = "${caelestiaDot}/hypr/hyprland";
"hypr/scheme" = {
source = "${caelestiaDot}/hypr/scheme";
recursive = true;
};
"hypr/scripts" = {
source = "${caelestiaDot}/hypr/scripts";
executable = true;
};
"hypr/variables.conf".source = "${caelestiaDot}/hypr/variables.conf";
};
wayland.windowManager.hyprland = {
settings = {
"$hypr" = "~/.config/hypr";
"$hl" = "$hypr/hyprland";
"$cConf" = "~/.config/caelestia";
# ### Hyprland ###
# Apps
"$terminal" = "ghostty";
"$browser" = "nvidia-offload zen";
"$editor" = "nvim";
"$fileExplorer" = "yazi";
# Touchpad
"$touchpadDisableTyping" = "true";
"$touchpadScrollFactor" = "0.3";
"$workSpaceSwipeFingers" = "4";
# Blur
"$blurEnabled" = "true";
"$blurSpecialWs" = "false";
"$blurPopups" = "true";
"$blurInputMethods" = "true";
"$blurSize" = "8";
"$blurPasses" = "2";
"$blurXray" = "false";
# Shadow
"$shadowEnabled" = "true";
"$shadowRange" = "20";
"$shadowRenderPower" = "3";
"$shadowColour" = "rgba($surfaced4)";
# Gaps
"$workspaceGaps" = "20";
"$windowGapsIn" = "10";
"$windowGapsOut" = "10";
"$singleWindowGapsOut" = "10";
# Window styling
"$windowOpacity" = "0.95";
"$windowRounding" = "10";
"$windowBorderSize" = "3";
"$activeWindowBorderColour" = "rgba($primarye6)";
"$inactiveWindowBorderColour" = "rgba($onSurfaceVariant11)";
# Misc
"$volumeStep" = "5 # In percent";
"$kbGoToWs" = "SUPER";
"$wsaction" = "~/.config/hypr/scripts/wsaction.fish";
source = [
"$hypr/scheme/current.conf"
"$hl/env.conf"
"$hl/input.conf"
"$hl/misc.conf"
"$hl/animations.conf"
"$hl/decoration.conf"
"$hl/group.conf"
"$hl/rules.conf"
"${pkgs.writeText "keybinds.conf" ''
exec = hyprctl dispatch submap global
submap = global
# ## Shell keybinds
# Launcher
bind = Super+CTRL, K, global, caelestia:showall
bindi = Super, Super_L, global, caelestia:launcher
bindin = Super, catchall, global, caelestia:launcherInterrupt
bindin = Super, mouse:272, global, caelestia:launcherInterrupt
bindin = Super, mouse:273, global, caelestia:launcherInterrupt
bindin = Super, mouse:274, global, caelestia:launcherInterrupt
bindin = Super, mouse:275, global, caelestia:launcherInterrupt
bindin = Super, mouse:276, global, caelestia:launcherInterrupt
bindin = Super, mouse:277, global, caelestia:launcherInterrupt
bindin = Super, mouse_up, global, caelestia:launcherInterrupt
bindin = Super, mouse_down, global, caelestia:launcherInterrupt
bind = Super, DELETE, global, caelestia:lock
bind = Super, Q, killactive,
bind = Super , RETURN, exec, app2unit -- $terminal
bind = Super, F, exec, app2unit -- $browser
bind = Super, V, togglefloating,
bind = Super, P, pseudo
bind = Super, S, togglesplit
bindl = , XF86AudioPlay, global, caelestia:mediaToggle
bindl = , XF86AudioPause, global, caelestia:mediaToggle
bindl = , XF86AudioNext, global, caelestia:mediaNext
bindl = , XF86AudioPrev, global, caelestia:mediaPrev
bindl = , XF86AudioStop, global, caelestia:mediaStop
bind = Super+SHIFT, s, global, caelestia:screenshot
bind = CTRL SHIFT, s, exec, hyprshot -m window
bind = CTRL SHIFT Super, s, exec, hyprshot -m output
bind = CTRL ALT, s, exec, hyprshot -m active -m window
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindle = , XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ $volumeStep%+
bindle = , XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ $volumeStep%-
bind = Super, Period, exec, pkill fuzzel || caelestia emoji -p
bind = Super+Shift, V, exec, pkill fuzzel || caelestia clipboard
''}"
];
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
''SUPER, mouse:272, movewindow''
''SUPER, mouse:273, resizewindow''
];
exec = [
"cp -L --no-preserve=mode --update=none $hypr/scheme/default.conf $hypr/scheme/current.conf"
];
misc = {
vrr = 0;
vfr = true;
};
};
};
home.activation.writeConfigFile =
lib.hm.dag.entryAfter [ "writeBoundary" ]
# bash
''
configList=("btop" "fastfetch" "thunar")
for config in "''\${configList[@]}"; do
if [ ! -d "$XDG_CONFIG_HOME/$config" ]; then
install -Dm666 "${caelestiaDot}/$config" "$XDG_CONFIG_HOME/$config"
fi
done
'';
fonts.fontconfig.enable = true;
programs.caelestia = {
enable = true;
settings = { };
cli = {
enable = true;
settings = { };
};
};
systemd.user.services.caelestia = {
Service = {
ExecStart = lib.mkForce "${pkgs.writeShellScript "caelestia-wrapper" ''
export QT_QPA_PLATFORMTHEME=gtk3
${config.programs.caelestia.package}/bin/caelestia-shell
''}";
};
};
services.swww.enable = lib.mkForce false;
programs.waybar.enable = lib.mkForce false;
services.swaync.enable = lib.mkForce false;
}

View file

@ -1,3 +1,4 @@
{ ... }:
let
configDir = ../config;
browser = "zen.desktop";
@ -37,6 +38,8 @@ in
"application/pdf" = [ browser ];
"image/jpeg" = [ browser ];
"image/png" = [ browser ];
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
};
};
}

View file

@ -26,7 +26,7 @@ in
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-folders;
package = pkgs.papirus-icon-theme;
};
gtk3 = {
@ -43,29 +43,14 @@ in
};
home.packages = with pkgs; [
libsForQt5.qtstyleplugin-kvantum
libsForQt5.lightly
libsForQt5.qt5ct
adwaita-icon-theme
gsettings-desktop-schemas
glib
(catppuccin-kvantum.override {
accent = "lavender";
variant = "macchiato";
})
];
qt = {
enable = true;
style.name = "qt5ct-style";
style.package = pkgs.catppuccin-kvantum;
platformTheme.name = "qtct";
};
xdg.configFile = {
"Kvantum/catppuccin-macchiato-Lavender/catppuccin-macchiato-lavender/catppuccin-macchiato-lavender.kvconfig".source =
"${pkgs.catppuccin-kvantum}/share/Kvantum/catppuccin-macchiato-lavender/cattpuccin-macchiato-lavender.kvconfig";
"Kvantum/catppuccin-macchiato-Lavender/catppuccin-macchiato-lavender/catppuccin-macchiato-lavender.svg".source =
"${pkgs.catppuccin-kvantum}/share/Kvantum/catppuccin-macchiato-lavender/cattpuccin-macchiato-lavender.svg";
style.name = "adwaita-dark";
platformTheme.name = "gtk3";
};
}

View file

@ -6,6 +6,9 @@
kb_model = "";
kb_rules = "";
repeat_delay = 250;
repeat_rate = 35;
follow_mouse = 1;
accel_profile = "flat";
@ -17,6 +20,9 @@
sensitivity = -0.1; # -1.0 - 1.0, 0 means no modification.
};
binds = {
scroll_event_delay = 0;
};
cursor = {
no_hardware_cursors = true;

View file

@ -10,7 +10,6 @@
"col.active_border" = "rgb(EBDBB2) rgb(24273A) rgb(24273A) rgb(EBDBB2) 45deg";
"col.inactive_border" = "rgb(24273A) rgb(24273A) rgb(24273A) rgb(24273A) 45deg";
layout = "dwindle";
allow_tearing = false;
};
decoration = {

View file

@ -34,6 +34,8 @@ in
"float, class:^(xdg-desktop-portal-gtk)$"
"float, title:^(Steam Settings)$"
"fullscreen, initialClass:^(cs2)$"
"opacity 0.9999 override, initialClass:^(zen)(.*)"
# Picture in picture windows

View file

@ -4,8 +4,8 @@
{
pkgs,
lib,
inputs,
config,
inputs,
system,
osConfig,
...
@ -63,16 +63,18 @@ in
disable_logs = true;
};
bind = import ./hypr/bind.nix {
inherit
mainMod
pkgs
monitors
config
lib
;
nvidia-offload-enabled = osConfig.hardware.nvidia.prime.offload.enableOffloadCmd;
};
bind = (
import ./hypr/bind.nix {
inherit
mainMod
pkgs
monitors
config
lib
;
nvidia-offload-enabled = osConfig.hardware.nvidia.prime.offload.enableOffloadCmd;
}
);
bindm = [
# Move/resize windows with mainMod + LMB/RMB and dragging
@ -84,7 +86,7 @@ in
let
resizeStep = builtins.toString 20;
brightnessStep = builtins.toString 10;
volumeStep = builtins.toString 2;
volumeStep = builtins.toString 4;
in
[
'',XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ ${volumeStep}%+''
@ -126,6 +128,10 @@ in
];
workspace = (import ./hypr/workspace.nix { inherit monitors; });
misc = {
disable_hyprland_logo = true;
force_default_wallpaper = 0;
};
}
// (import ./hypr/window.nix)
// (import ./hypr/windowrule.nix)
@ -145,17 +151,6 @@ in
package = inputs.swww.packages.${system}.swww;
};
# === hyprpaper (Disabled) === #
services.hyprpaper = {
enable = false;
settings = {
# preload = wallpapers;
wallpaper = [ ", ~/.config/wallpapers/wall.png" ];
splash = false;
ipc = "on";
};
};
# === hyprlock === #
programs.hyprlock = {
enable = true;
@ -329,8 +324,8 @@ in
};
};
# === hyprsunset === #
systemd.user.services.hyprsunset = {
# === sunsetr === #
systemd.user.services.sunsetr = {
Install = {
WantedBy = [ "graphical-session.target" ];
};
@ -339,10 +334,9 @@ in
Description = "Blue light filter";
};
Service = {
ExecStart = "${pkgs.hyprsunset}/bin/hyprsunset -t 3000k";
ExecStart = "${pkgs.sunsetr}/bin/sunsetr";
Restart = "always";
RestartSec = 2;
KillSignal = "SIGKILL"; # Hyprsunset seems not handle the SIGTERM signal properly
};
};

31
home/user/quickshell.nix Normal file
View file

@ -0,0 +1,31 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
quickshell
];
systemd.user.services.quickshell = {
Unit = {
Description = "Quickshell";
After = [ "graphical-session.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {
type = "exec";
ExecStart = "${pkgs.quickshell}/bin/quickshell";
Restart = "on-failure";
RestartSec = "5s";
TimeoutStopSec = "5s";
Environment = [
"QT_QPA_PLATFORM=wayland"
];
Slice = "session.slice";
};
Install = {
WantedBy = [ "graphical-session.target" ];
};
};
}

View file

@ -12,7 +12,6 @@
# Hyprland
hyprlog = "grep -v \"arranged\" $XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | cat";
saveEye = "pkill -f hyprsunset && hyprctl dispatch exec 'hyprsunset -t 3300'";
# Systemd Boot
setWin = "sudo bootctl set-oneshot auto-windows";

View file

@ -5,6 +5,7 @@
osConfig,
config,
username,
lib,
pkgs,
...
}:
@ -44,7 +45,7 @@ in
];
# === waybar === #
systemd.user.services.waybar = {
systemd.user.services.waybar = lib.mkIf config.programs.waybar.enable {
Unit = {
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
@ -252,6 +253,8 @@ in
"code"
".virt-manager-wrapped"
"virt-manager"
"steam_app_*"
"obsidian"
];
};
"custom/cava" = {

View file

@ -1,17 +1,15 @@
{
inputs,
config,
system,
pkgs,
lib,
...
}:
let
yaziPlugins = pkgs.fetchFromGitHub {
owner = "yazi-rs";
repo = "plugins";
rev = "86d28e4fb4f25f36cc501b8cb0badb37a6b14263";
hash = "sha256-m/gJTDm0cVkIdcQ1ZJliPqBhNKoCW1FciLkuq7D1mxo=";
rev = "main";
hash = "sha256-TUS+yXxBOt6tL/zz10k4ezot8IgVg0/2BbS8wPs9KcE=";
};
in
{
@ -20,10 +18,14 @@ in
enable = true;
package = inputs.yazi.packages.${system}.default;
shellWrapperName = "y";
enableFishIntegration = false;
enableFishIntegration = true;
plugins = {
toggle-panel = ''${yaziPlugins}/toggle-panel.yazi'';
toggle-pane = ''${yaziPlugins}/toggle-pane.yazi'';
mount = ''${yaziPlugins}/mount.yazi'';
zoom = ''${yaziPlugins}/zoom'';
vcs-files = ''${yaziPlugins}/vcs-files'';
git = ''${yaziPlugins}/git'';
};
flavors = {
@ -42,9 +44,81 @@ in
};
};
settings = {
plugin.prepend_fetchers = [
{
id = "git";
name = "*";
run = "git";
}
{
id = "git";
name = "*/";
run = "git";
}
];
input = {
cursor_blink = true;
};
opener = {
edit = [
{
run = ''''\${EDITOR:=nvim} "$@"'';
desc = "$EDITOR";
block = true;
}
{
run = ''code "$@"'';
orphan = true;
}
];
player = [
{ run = ''mpv --force-window "$@"''; }
];
};
};
keymap = {
mgr = {
prepend_keymap = [
# Git Changes
{
on = [
"g"
"c"
];
run = "plugin vcs-files";
desc = "Show Git file changes";
}
# Image zoom
{
on = "+";
run = "plugin zoom 1";
desc = "Zoom in hovered file";
}
{
on = "-";
run = "plugin zoom -1";
desc = "Zoom out hovered file";
}
# Mount Manager
{
on = "M";
run = "plugin mount";
desc = "Launch mount manager";
# Usage
# Key binding Alternate key Action
# q - Quit the plugin
# k ↑ Move up
# j ↓ Move down
# l → Enter the mount point
# m - Mount the partition
# u - Unmount the partition
# e - Eject the disk
}
# Toggle Maximize Preview
{
on = "T";
@ -66,6 +140,7 @@ in
"r"
];
run = ''shell -- ya emit cd "$(git rev-parse --show-toplevel)"'';
desc = "Go to git root";
}
# Drag and Drop
{
@ -92,16 +167,6 @@ in
initLua =
# lua
''
-- Show symlink in status bar
Status:children_add(function(self)
local h = self._current.hovered
if h and h.link_to then
return " -> " .. toString(h.link_to)
else
return ""
end
end, 3300, Status.LEFT)
-- Show user/group of files in status bar
Status:children_add(function()
local h = cx.active.current.hovered
@ -116,14 +181,6 @@ in
" ",
}
end, 500, Status.RIGHT)
-- Show username and hostname in header
Header:children_add(function()
if ya.target_family() ~= "unix" then
return ""
end
return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ":"):fg("blue")
end, 500, Header.LEFT)
'';
};
};
@ -131,36 +188,4 @@ in
home.packages = with pkgs; [
ueberzugpp
];
# xdg.portal = {
# enable = lib.mkForce true;
# extraPortals = [ pkgs.xdg-desktop-portal-termfilechooser ];
# config = {
# common.default = [
# "hyprland"
# "gtk"
# ];
# common = {
# "org.freedesktop.impl.portal.FileChooser" = "termfilechooser";
# };
# hyprland.default = [
# "hyprland"
# "gtk"
# ];
# hyprland."org.freedesktop.impl.portal.FileChooser" = [ "termfilechooser" ];
# };
# };
# xdg.configFile."xdg-desktop-portal-termfilechooser/config" = {
# force = true;
# text = ''
# [filechooser]
# cmd=TERMCMD='${config.programs.ghostty.package}/bin/ghostty --title=file_chooser -e "bash -c ${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh"'
# default_dir=$HOME
# open_mode = suggested
# save_mode = last
# '';
# };
# home.sessionVariables.TERMCMD = "${config.programs.ghostty.package}/bin/ghostty --title=file_chooser";
}

View file

@ -1,6 +1,15 @@
{
pkgs,
...
}:
let
zenNebula = pkgs.fetchFromGitHub {
owner = "justadumbprsn";
repo = "zen-nebula";
rev = "main";
sha256 = "sha256-f4J5ob/apKhxERUSvXE8QHMMsKJCQFRoMSo/Pw4LgTg=";
};
in
{
programs.zen-browser = {
enable = true;
@ -12,6 +21,8 @@
"zen.view.compact.should-enable-at-startup" = true;
"zen.widget.linux.transparency" = true;
"zen.view.compact.show-sidebar-and-toolbar-on-hover" = false;
"zen.tabs.vertical.right-side" = true;
"zen.urlbar.behavior" = "float";
"app.update.auto" = false;
"app.normandy.first_run" = false;
@ -20,7 +31,7 @@
"browser.shell.didSkipDefaultBrowserCheckOnFirstRun" = true;
"browser.tabs.allow_transparent_browser" = true;
"browser.urlbar.placeholderName" = "Google";
"browser.urlbar.placeholderName.private" = "private";
"browser.urlbar.placeholderName.private" = "DuckDuckGo";
"middlemouse.paste" = false;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"font.language.group" = "zh-TW";
@ -35,7 +46,9 @@
ensureCACertifications = [
../../system/extra/ca.crt
];
chrome = zenNebula;
};
};
};
}