Initial commit

This commit is contained in:
Ceres 2026-01-11 23:23:04 +00:00
commit f94fd70f07
Signed by: ceres-sees-all
GPG key ID: 9814758436430045
151 changed files with 7650 additions and 0 deletions

257
btop/btop.conf Normal file
View file

@ -0,0 +1,257 @@
#? Config file for btop v. 1.4.5
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "caelestia"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = False
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = False
#* Show processes as a tree.
proc_tree = False
#* Use the cpu graph colors in the process list.
proc_colors = True
#* Use a darkening gradient in the process list.
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
#* Show cpu graph for each process.
proc_cpu_graphs = True
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
#* Show proc box on left side of screen instead of right.
proc_left = False
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = True
#* Show cpu temperature.
check_temp = True
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
#* Show CPU frequency.
show_cpu_freq = True
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = True
#* Show mem box below net box instead of above.
mem_below_net = False
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
#* If swap memory should be shown in memory box.
show_swap = True
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True
#* If mem box should be split to also show disks info.
show_disks = True
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = True
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = True
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = True
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""

View file

@ -0,0 +1,83 @@
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]=#141318
# Main text color
theme[main_fg]=#e6e1e9
# Title color for boxes
theme[title]=#e6e1e9
# Highlight color for keyboard shortcuts
theme[hi_fg]=#cbbeff
# Background color of selected item in processes box
theme[selected_bg]=#201f24
# Foreground color of selected item in processes box
theme[selected_fg]=#cbbeff
# Color of inactive/disabled text
theme[inactive_fg]=#938f99
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]=#edb8cc
# Background color of the percentage meters
theme[meter_bg]=#938f99
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]=#edb8cc
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]=#c7b6ff
theme[mem_box]=#c8e3ff
theme[net_box]=#cfb3ea
theme[proc_box]=#b9b5ff
# Box divider line and small boxes line color
theme[div_line]=#48454e
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]=#c8e3ff
theme[temp_mid]=#ffecf3
theme[temp_end]=#cba2f9
# CPU graph colors (Teal -> Sapphire -> Lavender)
theme[cpu_start]=#d7deff
theme[cpu_mid]=#bec3ff
theme[cpu_end]=#cec6ff
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]=#c7b6ff
theme[free_mid]=#cec6ff
theme[free_end]=#b9b5ff
# Mem/Disk cached meter (Sapphire -> Blue -> Lavender)
theme[cached_start]=#bec3ff
theme[cached_mid]=#b9b5ff
theme[cached_end]=#cec6ff
# Mem/Disk available meter (Peach -> Maroon -> Red)
theme[available_start]=#e6c0f5
theme[available_mid]=#cfb3ea
theme[available_end]=#cba2f9
# Mem/Disk used meter (Green -> Teal -> Sky)
theme[used_start]=#c8e3ff
theme[used_mid]=#d7deff
theme[used_end]=#d4d9ff
# Download graph colors (Peach -> Maroon -> Red)
theme[download_start]=#e6c0f5
theme[download_mid]=#cfb3ea
theme[download_end]=#cba2f9
# Upload graph colors (Green -> Teal -> Sky)
theme[upload_start]=#c8e3ff
theme[upload_mid]=#d7deff
theme[upload_end]=#d4d9ff
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Lavender -> Mauve)
theme[process_start]=#bec3ff
theme[process_mid]=#cec6ff
theme[process_end]=#c7b6ff

View file

@ -0,0 +1,14 @@
# This file was created by fish when upgrading to version 4.3, to migrate
# the 'fish_key_bindings' variable from its old default scope (universal)
# to its new default scope (global). We recommend you delete this file
# and configure key bindings in ~/.config/fish/config.fish if needed.
# set --global fish_key_bindings fish_default_key_bindings
# Prior to version 4.3, fish shipped an event handler that runs
# `set --universal fish_key_bindings fish_default_key_bindings`
# whenever the fish_key_bindings variable is erased.
# This means that as long as any fish < 4.3 is still running on this system,
# we cannot complete the migration.
# As a workaround, erase the universal variable at every shell startup.
set --erase --universal fish_key_bindings

62
fish/config.fish Normal file
View file

@ -0,0 +1,62 @@
if status is-interactive
set -e SSH_AUTH_SOCK
set -U -x SSH_AUTH_SOCK (gpgconf --list-dirs agent-ssh-socket)
set -x GPG_TTY (tty)
gpgconf --launch gpg-agent
set -gx EDITOR /usr/bin/hx
# Starship custom prompt
starship init fish | source
# Direnv + Zoxide
command -v direnv &>/dev/null && direnv hook fish | source
command -v zoxide &>/dev/null && zoxide init fish --cmd cd | source
# Better ls
alias ls='eza --icons --group-directories-first -1'
# Abbrs
abbr lg lazygit
abbr gd 'git diff'
abbr ga 'git add .'
abbr gc 'git commit -am'
abbr gl 'git log'
abbr gs 'git status'
abbr gst 'git stash'
abbr gsp 'git stash pop'
abbr gp 'git push'
abbr gpl 'git pull'
abbr gsw 'git switch'
abbr gsm 'git switch main'
abbr gb 'git branch'
abbr gbd 'git branch -d'
abbr gco 'git checkout'
abbr gsh 'git show'
abbr l ls
abbr ll 'ls -l'
abbr la 'ls -a'
abbr lla 'ls -la'
# Custom colours
#cat ~/.local/state/caelestia/sequences.txt 2>/dev/null
# For jumping between prompts in foot terminal
function mark_prompt_start --on-event fish_prompt
echo -en "\e]133;A\e\\"
end
function y
set tmp (mktemp -t "yazi-cwd.XXXXXX")
yazi $argv --cwd-file="$tmp"
if read -z cwd <"$tmp"; and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd"
end
rm -f -- "$tmp"
end
bind \cz 'fg 2>/dev/null; commandline -f repaint'
end

5
fish/fish_variables Normal file
View file

@ -0,0 +1,5 @@
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR --export SSH_AUTH_SOCK:/run/user/1000/gnupg/S\x2egpg\x2dagent\x2essh
SETUVAR __fish_initialized:4300
SETUVAR fish_user_paths:/home/ceres/\x2elocal/bin/qmk\x2dtoolchain/bin\x1e/home/ceres/Git/monero/build/Linux/master/release/bin\x1e/home/ceres/Git/depot_tools

3
fish/functions/1 Normal file
View file

@ -0,0 +1,3 @@
ringed azure sunsets,
highest peaks under two suns;
tiny shining dot

3
fish/functions/2 Normal file
View file

@ -0,0 +1,3 @@
stunning dusty clouds
stars dancing in synchrony
amidst endless dark

3
fish/functions/3 Normal file
View file

@ -0,0 +1,3 @@
starry fireworks spark
galaxy-bright, yet so small—
little fires start

3
fish/functions/4 Normal file
View file

@ -0,0 +1,3 @@
distant city lights
sea and sky merge in blackness—
an infinite void

View file

@ -0,0 +1,10 @@
function fish_greeting
set num $(random 1 4)
echo -ne '\x1b[36;16m' # Set colour to primary
echo '▄▖ ▄▖ ▄▖▜ ▜ '
echo '▌ █▌▛▘█▌▛▘▄▖▚ █▌█▌▛▘▄▖▌▌▐ ▐ '
echo '▙▖▙▖▌ ▙▖▄▌ ▄▌▙▖▙▖▄▌ ▛▌▐▖▐▖'
echo ''
echo "$(cat ~/.caelestia/fish/functions/$num)"
glafetch
end

21
foot/colours.ini Normal file
View file

@ -0,0 +1,21 @@
[colors]
foreground=FDF8F0
background=151313
regular0=3F3D3D
regular1=51494A
regular2=866F67
regular3=808578
regular4=897E6B
regular5=EEDA8D
regular6=F9ECD4
regular7=F4EDE1
bright0=ABA69D
bright1=51494A
bright2=866F67
bright3=808578
bright4=897E6B
bright5=EEDA8D
bright6=F9ECD4
bright7=F4EDE1

31
foot/foot.ini Normal file
View file

@ -0,0 +1,31 @@
shell=fish
title=foot
font=Departure Mono:size=12
letter-spacing=0
dpi-aware=no
pad=25x25
bold-text-in-bright=no
gamma-correct-blending=no
[scrollback]
lines=10000
[cursor]
style=beam
beam-thickness=1.5
[colors]
alpha=0.78
[main]
include=/home/ceres/.caelestia/foot/colours.ini
[key-bindings]
scrollback-up-page=Page_Up
scrollback-down-page=Page_Down
search-start=Control+Shift+f
[search-bindings]
cancel=Escape
find-prev=Shift+F3
find-next=F3 Control+G

15
glafetch/config.json Normal file
View file

@ -0,0 +1,15 @@
{
"show_err": false,
"use_bold": true,
"items": [
"separator",
"host",
"kernel",
"cpu",
"de",
"portage_world",
"portage_all",
"Thank you Cyn :3",
"separator"
]
}

24
helix/config.toml Normal file
View file

@ -0,0 +1,24 @@
theme = "theme"
[editor.indent-guides]
render = true
[keys.normal.space]
e = [
':sh rm -f /tmp/unique-file',
':sh rm -f /tmp/unique-cwd-file',
":insert-output yazi --chooser-file=/tmp/unique-file --cwd-file=/tmp/unique-cwd-file",
':insert-output echo "\x1b[?1049h\x1b[?2004h" > /dev/tty',
':open %sh{cat /tmp/unique-file}',
':cd %sh{cat /tmp/unique-cwd-file}',
':redraw',
]
# helix/config.toml
[keys.normal]
C-g = [
":write-all",
":insert-output lazygit >/dev/tty",
":redraw",
":reload-all"
]

23
helix/languages.toml Normal file
View file

@ -0,0 +1,23 @@
[[language]]
name = "latex"
soft-wrap.enable = true
[language-server.texlab.config.texlab.build]
onSave = true
forwardSearchAfter = true
[language-server.texlab.config.texlab.forwardSearch]
executable = "qpdfview"
args = ["--unique", "%p#src:%f:%l:1"]
[language-server.texlab.config.texlab.chktex]
onEdit = true
[[language]]
name = "bash"
file-types = ["ebuild"]
[[language]]
name = "markdown"
soft-wrap.enable = true

4
helix/themes/theme.toml Normal file
View file

@ -0,0 +1,4 @@
inherits = "catppuccin_mocha"
"ui.background" = {}
"ui.statusline" = {}

7
niri/colours.kdl Normal file
View file

@ -0,0 +1,7 @@
layout {
border {
active-color "#51494A"
inactive-color "#201D1E"
urgent-color "#866F67"
}
}

561
niri/config.kdl Normal file
View file

@ -0,0 +1,561 @@
include "colours.kdl"
input {
keyboard {
xkb {
// You can set rules, model, layout, variant and options.
// For more information, see xkeyboard-config(7).
// For example:
// layout "us,ru"
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
// If this section is empty, niri will fetch xkb settings
// from org.freedesktop.locale1. You can control these using
// localectl set-x11-keymap.
}
// Enable numlock on startup, omitting this setting disables it.
numlock
}
// Next sections include libinput settings.
// Omitting settings disables them, or leaves them at their default values.
// All commented-out settings here are examples, not defaults.
touchpad {
// off
tap
// dwt
// dwtp
// drag false
// drag-lock
natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
}
mouse {
// off
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "no-scroll"
}
trackpoint {
// off
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
// scroll-method "on-button-down"
// scroll-button 273
// scroll-button-lock
// middle-emulation
}
// Uncomment this to make the mouse warp to the center of newly focused windows.
warp-mouse-to-focus
// Focus windows and outputs automatically when moving the mouse into them.
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
focus-follows-mouse max-scroll-amount="100%"
}
// You can configure outputs by their name, which you can find
// by running `niri msg outputs` while inside a niri instance.
// The built-in laptop monitor is usually called "eDP-1".
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Outputs
// Remember to uncomment the node by removing "/-"!
/-output "eDP-1" {
// Uncomment this line to disable this output.
// off
// Resolution and, optionally, refresh rate of the output.
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
// If the refresh rate is omitted, niri will pick the highest refresh rate
// for the resolution.
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
mode "1920x1080@120.030"
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
scale 2
// Transform allows to rotate the output counter-clockwise, valid values are:
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
transform "normal"
// Position of the output in the global coordinate space.
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
// The cursor can only move between directly adjacent outputs.
// Output scale and rotation has to be taken into account for positioning:
// outputs are sized in logical, or scaled, pixels.
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
// so to put another output directly adjacent to it on the right, set its x to 1920.
// If the position is unset or results in an overlap, the output is instead placed
// automatically.
position x=1280 y=0
}
// Settings that influence how windows are positioned and sized.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
gaps 16
// These set global defaults for blur, however it needs to be enabled
// individually on a per-window or per-layer basis as well for it to have
// any effect.
//
// Certain apps that support the KDE blur protocol may blur themselves as well.
blur {
noise 0.1
passes 2
radius 6
// Sensible default, gets applied to blurred layer surfaces, as most of the
// time, the actual surface is bigger than what is rendered on screen.
ignore-alpha 0.8
}
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
// or right edge of the screen.
// - "always", the focused column will always be centered.
// - "on-overflow", focusing a column will center it if it doesn't fit
// together with the previously focused column.
center-focused-column "never"
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
preset-column-widths {
// Proportion sets the width as a fraction of the output width, taking gaps into account.
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
proportion 0.33333
proportion 0.5
proportion 0.66667
// Fixed sets the width in logical pixels exactly.
// fixed 1920
}
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
// preset-window-heights { }
// You can change the default width of the new windows.
default-column-width { proportion 0.5; }
// If you leave the brackets empty, the windows themselves will decide their initial width.
// default-column-width {}
// By default focus ring and border are rendered as a solid background rectangle
// behind windows. That is, they will show up through semitransparent windows.
// This is because windows using client-side decorations can have an arbitrary shape.
//
// If you don't like that, you should uncomment `prefer-no-csd` below.
// Niri will draw focus ring and border *around* windows that agree to omit their
// client-side decorations.
//
// Alternatively, you can override it with a window rule called
// `draw-border-with-background`.
// You can change how the focus ring looks.
focus-ring {
// Uncomment this line to disable the focus ring.
off
// How many logical pixels the ring extends out from the windows.
width 4
// Colors can be set in a variety of ways:
// - CSS named colors: "red"
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
// Color of the ring on the active monitor.
active-color "#7fc8ff"
// Color of the ring on inactive monitors.
//
// The focus ring only draws around the active window, so the only place
// where you can see its inactive-color is on other monitors.
inactive-color "#505050"
// You can also use gradients. They take precedence over solid colors.
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
// The angle is the same as in linear-gradient, and is optional,
// defaulting to 180 (top-to-bottom gradient).
// You can use any CSS linear-gradient tool on the web to set these up.
// Changing the color space is also supported, check the wiki for more info.
//
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
// You can also color the gradient relative to the entire view
// of the workspace, rather than relative to just the window itself.
// To do that, set relative-to="workspace-view".
//
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
}
border {
on
width 4
}
// You can enable drop shadows for windows.
shadow {
// Uncomment the next line to enable shadows.
// on
// By default, the shadow draws only around its window, and not behind it.
// Uncomment this setting to make the shadow draw behind its window.
//
// Note that niri has no way of knowing about the CSD window corner
// radius. It has to assume that windows have square corners, leading to
// shadow artifacts inside the CSD rounded corners. This setting fixes
// those artifacts.
//
// However, instead you may want to set prefer-no-csd and/or
// geometry-corner-radius. Then, niri will know the corner radius and
// draw the shadow correctly, without having to draw it behind the
// window. These will also remove client-side shadows if the window
// draws any.
//
// draw-behind-window true
// You can change how shadows look. The values below are in logical
// pixels and match the CSS box-shadow properties.
// Softness controls the shadow blur radius.
softness 30
// Spread expands the shadow.
spread 5
// Offset moves the shadow relative to the window.
offset x=0 y=5
// You can also change the shadow color and opacity.
color "#0007"
}
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
// You can think of them as a kind of outer gaps. They are set in logical pixels.
// Left and right struts will cause the next window to the side to always be visible.
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps.
struts {
// left 64
// right 64
// top 64
// bottom 64
}
}
// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
// which may be more convenient to use.
// See the binds section below for more spawn examples.
// This line starts waybar, a commonly used bar for Wayland compositors.
spawn-sh-at-startup "/home/ceres/.caelestia/niri/random-wallpaper.sh"
spawn-sh-at-startup "qs -c shell"
spawn-sh-at-startup "echo start | sudo tee /sys/class/remoteproc/remoteproc0/state"
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
hotkey-overlay {
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
skip-at-startup
}
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
// This option will also fix border/focus ring drawing behind some semitransparent windows.
// After enabling or disabling this, you need to restart the apps for this to take effect.
prefer-no-csd
// You can change the path where screenshots are saved.
// A ~ at the front will be expanded to the home directory.
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null
// Animation settings.
// The wiki explains how to configure individual animations:
// https://yalter.github.io/niri/Configuration:-Animations
animations {
// Uncomment to turn off all animations.
// off
// Slow down all animations by this factor. Values below 1 speed them up instead.
// slowdown 3.0
}
// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://yalter.github.io/niri/Configuration:-Window-Rules
// Work around WezTerm's initial configure bug
// by setting an empty default-column-width.
window-rule {
// This regular expression is intentionally made as specific as possible,
// since this is the default config, and we want no false positives.
// You can get away with just app-id="wezterm" if you want.
match app-id=r#"^org\.wezfurlong\.wezterm$"#
default-column-width {}
}
// Open the Firefox picture-in-picture player as floating by default.
window-rule {
// This app-id regular expression will work for both:
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
open-floating true
}
window-rule {
// This app-id regular expression will work for both:
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match title="^qs-pass$"
open-floating true
}
window-rule {
// This app-id regular expression will work for both:
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match title="^wallpaper-selector$"
open-floating true
}
// Example: block out two password managers from screen capture.
// (This example rule is commented out with a "/-" in front.)
/-window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
block-out-from "screen-capture"
// Use this instead if you want them visible on third-party screenshot tools.
// block-out-from "screencast"
}
// Example: enable rounded corners for all windows.
// (This example rule is commented out with a "/-" in front.)
window-rule {
geometry-corner-radius 12
clip-to-geometry true
draw-border-with-background false
blur {
on
}
}
window-rule {
match app-id="zen"
opacity 0.95
}
overview {
backdrop-color "#1e1e2e"
}
binds {
Mod+T hotkey-overlay-title="Open a Terminal: alacritty" { spawn "foot"; }
Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; }
Super+Alt+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; }
Mod+B { spawn "zen"; }
Mod+P { spawn-sh "qs ipc -c shell call pass toggle"; }
Mod+Space { spawn-sh "qs ipc -c shell call launcher toggle"; }
Mod+W { spawn-sh "qs ipc -c shell call widgets toggle"; }
Mod+L { spawn-sh "qs -c lock"; }
Mod+Z repeat=false { toggle-overview; }
Mod+Q repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-or-workspace-down; }
Mod+Up { focus-window-or-workspace-up; }
Mod+Right { focus-column-right; }
Mod+N { focus-column-left; }
Mod+H { focus-window-or-workspace-down; }
Mod+O { focus-window-or-workspace-up; }
Mod+E { focus-column-right; }
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down-or-to-workspace-down; }
Mod+Ctrl+Up { move-window-up-or-to-workspace-up; }
Mod+Ctrl+Right { move-column-right; }
Mod+Ctrl+N { move-column-left; }
Mod+Ctrl+H { move-window-down-or-to-workspace-down; }
Mod+Ctrl+O { move-window-up-or-to-workspace-up; }
Mod+Ctrl+E { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Shift+Left { focus-monitor-left; }
Mod+Shift+Down { focus-monitor-down; }
Mod+Shift+Up { focus-monitor-up; }
Mod+Shift+Right { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
// Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ...
// And you can also move a whole workspace to another monitor:
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
// ...
// You can bind mouse wheel scroll ticks using the following syntax.
// These binds will change direction based on the natural-scroll setting.
//
// To avoid scrolling through workspaces really fast, you can use
// the cooldown-ms property. The bind will be rate-limited to this value.
// You can set a cooldown on any bind, but it's most useful for the wheel.
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
// Usually scrolling up and down with Shift in applications results in
// horizontal scrolling; these binds replicate that.
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Ctrl+1 { move-column-to-workspace 1; }
Mod+Ctrl+2 { move-column-to-workspace 2; }
Mod+Ctrl+3 { move-column-to-workspace 3; }
Mod+Ctrl+4 { move-column-to-workspace 4; }
Mod+Ctrl+5 { move-column-to-workspace 5; }
Mod+Ctrl+6 { move-column-to-workspace 6; }
Mod+Ctrl+7 { move-column-to-workspace 7; }
Mod+Ctrl+8 { move-column-to-workspace 8; }
Mod+Ctrl+9 { move-column-to-workspace 9; }
// Alternatively, there are commands to move just a single window:
// Mod+Ctrl+1 { move-window-to-workspace 1; }
// Switches focus between the current and the previous workspace.
// Mod+Tab { focus-workspace-previous; }
// The following binds move the focused window in and out of a column.
// If the window is alone, they will consume it into the nearby column to the side.
// If the window is already in a column, they will expel it out.
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
// Consume one window from the right to the bottom of the focused column.
Mod+Comma { consume-window-into-column; }
// Expel the bottom window from the focused column to the right.
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
// Cycling through the presets in reverse order is also possible.
// Mod+R { switch-preset-column-width-back; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Expand the focused column to space not taken up by other fully visible columns.
// Makes the column "fill the rest of the space".
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+C { center-column; }
// Center all fully visible columns on screen.
Mod+Ctrl+C { center-visible-columns; }
// Finer width adjustments.
// This command can also:
// * set width in pixels: "1000"
// * adjust width in pixels: "-5" or "+5"
// * set width as a percentage of screen width: "25%"
// * adjust width as a percentage of screen width: "-10%" or "+10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
// Finer height adjustments when in column with other windows.
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
// Move the focused window between the floating and the tiling layout.
Mod+V { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
// Toggle tabbed tile display mode.
// Windows can be moved into or out of this tile using the
// `move-window-into-or-out-of-group` action; example:
Mod+G { toggle-group; }
Mod+Alt+H { move-window-into-or-out-of-group "left"; }
Mod+Alt+L { move-window-into-or-out-of-group "right"; }
Mod+Alt+K { move-window-into-or-out-of-group "up"; }
Mod+Alt+J { move-window-into-or-out-of-group "down"; }
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
// Having both at once on the same hotkey will break the switching,
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
// Mod+Space { switch-layout "next"; }
// Mod+Shift+Space { switch-layout "prev"; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
// Applications such as remote-desktop clients and software KVM switches may
// request that niri stops processing the keyboard shortcuts defined here
// so they may, for example, forward the key presses as-is to a remote machine.
// It's a good idea to bind an escape hatch to toggle the inhibitor,
// so a buggy application can't hold your session hostage.
//
// The allow-inhibiting=false property can be applied to other binds as well,
// which ensures niri always processes them, even when an inhibitor is active.
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
// The quit action will show a confirmation dialog to avoid accidental exits.
Mod+Shift+E { quit; }
Ctrl+Alt+Delete { quit; }
// Powers off the monitors. To turn them back on, do any input like
// moving the mouse or pressing any other key.
Mod+Shift+P { power-off-monitors; }
}

6
niri/random-wallpaper.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/bash
wallpaper_path="$(find ~/.caelestia/wallpapers -type f | shuf -n 1)"
ln -sf ${wallpaper_path} "/home/ceres/.local/state/niri/wallpaper"
wallust run "${wallpaper_path}"

View file

@ -0,0 +1,25 @@
pragma Singleton
import Quickshell
Singleton {
readonly property string foreground: "#FDF8F0"
readonly property string background: "#151313"
readonly property string colour0: "#3F3D3D"
readonly property string colour1: "#51494A"
readonly property string colour2: "#866F67"
readonly property string colour3: "#808578"
readonly property string colour4: "#897E6B"
readonly property string colour5: "#EEDA8D"
readonly property string colour6: "#F9ECD4"
readonly property string colour7: "#F4EDE1"
readonly property string colour8: "#ABA69D"
readonly property string colour9: "#51494A"
readonly property string colour10: "#866F67"
readonly property string colour11: "#808578"
readonly property string colour12: "#897E6B"
readonly property string colour13: "#EEDA8D"
readonly property string colour14: "#F9ECD4"
readonly property string colour15: "#F4EDE1"
}

View file

@ -0,0 +1,54 @@
import QtQuick
import Quickshell
import Quickshell.Services.Pam
Scope {
id: root
signal unlocked()
signal failed()
// These properties are in the context and not individual lock surfaces
// so all surfaces can share the same state.
property string currentText: ""
property bool unlockInProgress: false
property bool showFailure: false
// Clear the failure text once the user starts typing.
onCurrentTextChanged: showFailure = false;
function tryUnlock() {
if (currentText === "") return;
root.unlockInProgress = true;
pam.start();
}
PamContext {
id: pam
// Its best to have a custom pam config for quickshell, as the system one
// might not be what your interface expects, and break in some way.
// This particular example only supports passwords.
configDirectory: "pam"
config: "password.conf"
// pam_unix will ask for a response for the password prompt
onPamMessage: {
if (this.responseRequired) {
this.respond(root.currentText);
}
}
// pam_unix won't send any important messages so all we need is the completion status.
onCompleted: result => {
if (result == PamResult.Success) {
root.unlocked();
} else {
root.currentText = "";
root.showFailure = true;
}
root.unlockInProgress = false;
}
}
}

View file

@ -0,0 +1,118 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.Fusion
import Quickshell.Wayland
import Quickshell.Services.UPower
Rectangle {
id: root
required property LockContext context
Image {
anchors.fill: parent
source: "/home/ceres/.local/state/niri/wallpaper"
}
Label {
id: clock
property var date: new Date()
font.family: "Departure Mono"
color: Colours.foreground
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.top
topMargin: 100
}
// The native font renderer tends to look nicer at large sizes.
renderType: Text.NativeRendering
font.pointSize: 80
// updates the clock every second
Timer {
running: true
repeat: true
interval: 1000
onTriggered: clock.date = new Date();
}
// updated when the date changes
text: {
const hours = this.date.getHours().toString().padStart(2, '0');
const minutes = this.date.getMinutes().toString().padStart(2, '0');
return `${hours}:${minutes}`;
}
}
Text {
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.top
topMargin: 250
}
renderType: Text.NativeRendering
font.pointSize: 30
font.family: "Departure Mono"
color: Colours.foreground
text: Math.floor(UPower.displayDevice.percentage * 100) + "% Battery"
}
ColumnLayout {
// Uncommenting this will make the password entry invisible except on the active monitor.
// visible: Window.active
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.verticalCenter
}
RowLayout {
TextField {
id: passwordBox
background: Rectangle {
color: Colours.background
opacity: 0.9
border.width: 4
border.color: Colours.colour2
radius: 20
}
implicitWidth: 400
padding: 10
color: Colours.foreground
horizontalAlignment: TextInput.AlignHCenter
focus: true
enabled: !root.context.unlockInProgress
echoMode: TextInput.Password
inputMethodHints: Qt.ImhSensitiveData
onTextChanged: root.context.currentText = this.text;
onAccepted: root.context.tryUnlock();
Connections {
target: root.context
function onCurrentTextChanged() {
passwordBox.text = root.context.currentText;
}
}
}
}
Label {
anchors.horizontalCenter: parent.horizontalCenter
visible: root.context.showFailure
text: "Incorrect password"
font.family: "Departure Mono"
color: Colours.foreground
}
}
}

View file

@ -0,0 +1,3 @@
auth required pam_unix.so
auth required pam_u2f.so cue authfile=/etc/u2f_mappings

31
quickshell/lock/shell.qml Normal file
View file

@ -0,0 +1,31 @@
import Quickshell
import Quickshell.Wayland
ShellRoot {
// This stores all the information shared between the lock surfaces on each screen.
LockContext {
id: lockContext
onUnlocked: {
// Unlock the screen before exiting, or the compositor will display a
// fallback lock you can't interact with.
lock.locked = false;
Qt.quit();
}
}
WlSessionLock {
id: lock
// Lock the session immediately when quickshell starts.
locked: true
WlSessionLockSurface {
LockSurface {
anchors.fill: parent
context: lockContext
}
}
}
}

View file

@ -0,0 +1,25 @@
pragma Singleton
import Quickshell
Singleton {
readonly property string foreground: "#FDF8F0"
readonly property string background: "#151313"
readonly property string colour0: "#3F3D3D"
readonly property string colour1: "#51494A"
readonly property string colour2: "#866F67"
readonly property string colour3: "#808578"
readonly property string colour4: "#897E6B"
readonly property string colour5: "#EEDA8D"
readonly property string colour6: "#F9ECD4"
readonly property string colour7: "#F4EDE1"
readonly property string colour8: "#ABA69D"
readonly property string colour9: "#51494A"
readonly property string colour10: "#866F67"
readonly property string colour11: "#808578"
readonly property string colour12: "#897E6B"
readonly property string colour13: "#EEDA8D"
readonly property string colour14: "#F9ECD4"
readonly property string colour15: "#F4EDE1"
}

View file

@ -0,0 +1,8 @@
pragma Singleton
import Quickshell
Singleton {
readonly property int launcherVisibleEntries: 5
readonly property real launcherOuterPadding: 10
}

View file

@ -0,0 +1,74 @@
//@ pragma IconTheme Adwaita
import Quickshell
import Quickshell.Wayland
import Quickshell.Io
import Quickshell.Widgets
import Quickshell.Services.UPower
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import "../Config"
PanelWindow {
anchors {
bottom: true
right: true
}
width: text.width + 70
color: "transparent"
function getIcon() {
if (UPower.displayDevice.percentage > 0.9) {
if (UPower.onBattery == false) {
return "xfce4-battery-full-charging"
}
else {
return "xfce4-battery-full"
}
}
else if (0.5 < UPower.displayDevice.percentage) {
if (UPower.onBattery == false) {
return "xfce4-battery-ok-charging"
}
else {
return "xfce4-battery-ok"
}
}
else if (0.1 < UPower.displayDevice.percentage) {
if (UPower.onBattery == false) {
return "xfce4-battery-low-charging"
}
else {
return "xfce4-battery-low"
}
}
}
Rectangle {
anchors.fill: parent
topLeftRadius: 20
opacity: 0.95
color: Colours.colour1
Row {
anchors.verticalCenter: parent.verticalCenter
IconImage {
anchors.verticalCenter: parent.verticalCenter
width: 50
height: 50
source: Quickshell.iconPath(getIcon())
}
Text {
id: text
color: Colours.foreground
font.family: "Departure Mono"
font.pixelSize: 50
text: Math.floor(UPower.displayDevice.percentage * 100) + "%"
}
}
}
}

View file

@ -0,0 +1,56 @@
//@ pragma IconTheme Adwaita
import Quickshell
import Quickshell.Wayland
import Quickshell.Io
import Quickshell.Widgets
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import "../Config"
PanelWindow {
anchors {
bottom: true
left: true
}
width: text.width + 20
color: "transparent"
Rectangle {
anchors.fill: parent
topRightRadius: 20
opacity: 0.95
color: Colours.colour1
Text {
id: text
anchors.centerIn: parent
color: Colours.foreground
font.family: "Departure Mono"
font.pixelSize: 50
Process {
id: dateProc
command: ["date"]
running: true
stdout: StdioCollector {
onStreamFinished: clock.text = this.text
}
}
Timer {
interval: 1000
running: true
repeat: true
onTriggered: text.text = Qt.formatDateTime(new Date(), "HH:mm")
}
}
}
}

View file

@ -0,0 +1,178 @@
import Quickshell
import Quickshell.Wayland
import Quickshell.Io
import Quickshell.Widgets
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import "../Config"
PanelWindow {
id: launcher
anchors.top: true
property var open: false
property int selectedIndex: 0
readonly property list<DesktopEntry> visibleEntries: Array.from(DesktopEntries.applications.values).sort((d1, d2) => d1.name.localeCompare(d2.name)).filter(application => application.name.toLowerCase().includes(search.text.toLowerCase()))
function genHeight() {
if (launcher.visibleEntries.length > Config.launcherVisibleEntries) {
return ((search.height * (Config.launcherVisibleEntries + 1) + Config.launcherOuterPadding))
}
else {
return (search.height * (launcher.visibleEntries.length + 1) + Config.launcherOuterPadding)
}
}
implicitHeight: open ? genHeight() : 0
implicitWidth: 500
color: "transparent"
visible: open ? true : false
Behavior on implicitHeight {
NumberAnimation {
duration: 80
easing.type: Easing.InOutQuad
easing.overshoot: 2
}
}
WlrLayershell.layer: WlrLayer.Overlay
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
exclusionMode: ExclusionMode.Ignore
Rectangle {
id: rect
anchors.fill: parent
color: Colours.background
opacity: 0.9
bottomLeftRadius: 20
bottomRightRadius: 20
ColumnLayout {
id: content
anchors.fill: parent
Row{
Rectangle {
color: "transparent"
width: Config.launcherOuterPadding
height: search.height
}
Rectangle {
height: search.height
width: search.height
color: "transparent"
IconImage {
anchors.centerIn: parent
source: Quickshell.iconPath("search-icon")
height: search.height
width: search.height
}
}
Rectangle {
color: "transparent"
width: launcher.width - search.height - (2 * Config.launcherOuterPadding)
height: search.height
TextField {
id: search
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
focus: true
placeholderText: "Search..."
background: null
color: Colours.foreground
placeholderTextColor: Colours.colour0
Keys.onPressed: event => {
if (event.key == Qt.Key_Return) {
launcher.open = false;
launcher.visibleEntries[launcher.selectedIndex].execute();
}
if (event.key == Qt.Key_Down) {
if (list.currentIndex < (launcher.visibleEntries.length-1)) {
list.currentIndex++;
}
event.accepted = true;
}
if (event.key == Qt.Key_Up) {
if (list.currentIndex > 0) {
list.currentIndex--;
}
event.accepted = true;
}
if (event.key == Qt.Key_Escape) {
launcher.open = false;
event.accepted = true;
}
}
}
}
Rectangle {
color: "transparent"
width: Config.launcherOuterPadding
height: search.height
}
}
ListView {
id: list
model: launcher.visibleEntries
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
preferredHighlightBegin: 0
highlight: Rectangle { color: Colours.colour1; radius:20 }
currentIndex: 0
delegate: Row {
Rectangle {
color: "transparent"
width: Config.launcherOuterPadding
height: search.height
}
Rectangle {
color: "transparent"
height: search.height
width: search.height
IconImage {
source: Quickshell.iconPath(modelData.icon, true)
height:search.height
width: search.height
}
}
Rectangle {
color: "transparent"
height: search.height
width: launcher.width - search.height - Config.launcherOuterPadding
Text{
color: Colours.foreground
text: modelData.name
anchors.verticalCenter: parent.verticalCenter
}
}
}
}
}
}
IpcHandler {
target: "launcher"
function toggle() {
search.text = ""
launcher.open = !launcher.open
}
}
}

View file

@ -0,0 +1,237 @@
import Quickshell
import Quickshell.Wayland
import Quickshell.Io
import Quickshell.Widgets
import QtQuick
import Qt.labs.folderlistmodel
import QtQuick.Layouts
import QtQuick.Controls
import "../Config"
PanelWindow {
id: pass
anchors.bottom: true
property var open: false
property int selectedIndex: 0
property string passLocation: ""
function genHeight() {
if (folderModel.count > 5) {
return 200
}
else {
return (search.height * (folderModel.count + 1)) + Config.launcherOuterPadding
}
}
Process {
id: passCopy
running: false
command: ["pass", "-c", passLocation]
}
Process {
id: userCopy
running: false
command: ["pass", "-c2", passLocation]
stdout: StdioCollector {
onStreamFinished: passCopy.running = true
}
}
function goBack() {
var lastSlash = list.currentItem.filePath.lastIndexOf('/')
var currentDir = list.currentItem.filePath.substring(0, lastSlash)
var lastSlash = currentDir.lastIndexOf('/')
var parentDir = currentDir.substring(0, lastSlash)
if (currentDir == "/home/ceres/.password-store") {
return;
}
else {
folderModel.folder = "file://" + parentDir
}
}
function copyPass() {
if(list.currentItem.fileIsDir==true) {
folderModel.folder = folderModel.folder+"/"+list.currentItem.fileBaseName
}
else {
passLocation = list.currentItem.filePath
passLocation = passLocation.replace("/home/ceres/.password-store/", "")
passLocation = passLocation.replace(".gpg", "")
userCopy.running = true
pass.open = false
search.text = ""
folderModel.folder = "file:///home/ceres/.password-store"
}
}
implicitHeight: open ? genHeight() : 0
implicitWidth: 500
color: "transparent"
visible: open ? true : false
Behavior on implicitHeight {
NumberAnimation {
duration: 80
easing.type: Easing.InOutQuad
easing.overshoot: 2
}
}
WlrLayershell.layer: WlrLayer.Overlay
WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
exclusionMode: ExclusionMode.Ignore
Rectangle {
id: rect
anchors.fill: parent
color: Colours.background
opacity: 0.9
topLeftRadius: 20
topRightRadius: 20
ColumnLayout {
id: content
anchors.fill: parent
Row{
Rectangle {
color: "transparent"
width: Config.launcherOuterPadding
height: search.height
}
Rectangle {
height: search.height
width: search.height
color: "transparent"
IconImage {
anchors.centerIn: parent
source: Quickshell.iconPath("search-icon")
height: search.height
width: search.height
}
}
Rectangle {
color: "transparent"
width: pass.width - search.height - (2 * Config.launcherOuterPadding)
height: search.height
TextField {
id: search
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
focus: true
placeholderText: "Search..."
background: null
color: Colours.foreground
placeholderTextColor: Colours.colour0
Keys.onPressed: event => {
if (event.key == Qt.Key_Return) {
copyPass();
event.accepted = true;
}
if (event.key == Qt.Key_Down) {
if(list.currentIndex<folderModel.count-1) {
list.currentIndex++;
}
event.accepted = true;
}
if (event.key == Qt.Key_Up) {
if (list.currentIndex > 0) {
list.currentIndex--;
}
event.accepted = true;
}
if (event.key == Qt.Key_Escape) {
pass.open = false;
list.currentIndex = 0
folderModel.folder = "file:///home/ceres/.password-store"
event.accepted = true;
}
if (event.key == Qt.Key_Tab) {
goBack();
event.accepted = true;
}
}
}
}
Rectangle {
color: "transparent"
width: Config.launcherOuterPadding
height: search.height
}
}
FolderListModel {
id: folderModel
folder: "file:///home/ceres/.password-store"
caseSensitive: false
showDirs: search.text === "" ? true : false
showDirsFirst: true
nameFilters: "*"+search.text+"*"
}
ListView {
id: list
model: folderModel
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
preferredHighlightBegin: 0
highlight: Rectangle { color: Colours.colour1; radius:20 }
currentIndex: 0
delegate: Row {
required property string fileBaseName
required property bool fileIsDir
required property string filePath
Rectangle {
color: "transparent"
width: Config.launcherOuterPadding
height: search.height
}
Rectangle {
color: "transparent"
height: search.height
width: pass.width - (2 * Config.launcherOuterPadding)
Text{
function genText() {
if(fileIsDir==true) {
return fileBaseName+"/"
}
else {
return fileBaseName
}
}
color: Colours.foreground
text: genText()
anchors.verticalCenter: parent.verticalCenter
}
}
}
}
}
}
IpcHandler {
target: "pass"
function toggle() {
search.text = ""
pass.open = !pass.open
}
}
}

View file

@ -0,0 +1,22 @@
import Quickshell
import QtQuick
import Quickshell.Wayland
PanelWindow {
id: background
anchors {
left: true
right: true
bottom: true
top: true
}
WlrLayershell.layer: WlrLayer.Background
Image {
width: background.width
height: background.height
source: "/home/ceres/.local/state/niri/wallpaper"
fillMode: Image.PreserveAspectCrop
}
}

View file

@ -0,0 +1,33 @@
import Quickshell
import Quickshell.Wayland
import Quickshell.Io
import Quickshell.Widgets
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import "../Config"
ShellRoot{
id: widgets
property var open: false
Battery {
visible: open ? true : false
height: open ? 80 : 0
}
Clock {
visible: open ? true : false
height: open ? 80 : 0
}
IpcHandler {
target: "widgets"
function toggle() {
widgets.open = !widgets.open
}
}
}

View file

@ -0,0 +1,9 @@
import Quickshell
import "Modules"
ShellRoot {
Wallpaper {}
Launcher {}
Widgets {}
Pass {}
}

320
starship.toml Normal file
View file

@ -0,0 +1,320 @@
# version: 1.0.0
add_newline = false
continuation_prompt = "[▸▹ ](dimmed white)"
format = """($nix_shell$container$fill$git_metrics\n)$cmd_duration\
$localip\
$shlvl\
$shell\
$env_var\
$jobs\
$sudo\
$username$hostname\
$character"""
right_format = """
$singularity\
$kubernetes\
$directory\
$vcsh\
$fossil_branch\
$git_branch\
$git_commit\
$git_state\
$git_status\
$hg_branch\
$pijul_channel\
$docker_context\
$package\
$c\
$cmake\
$cobol\
$daml\
$dart\
$deno\
$dotnet\
$elixir\
$elm\
$erlang\
$fennel\
$golang\
$guix_shell\
$haskell\
$haxe\
$helm\
$java\
$julia\
$kotlin\
$gradle\
$lua\
$nim\
$nodejs\
$ocaml\
$opa\
$perl\
$php\
$pulumi\
$purescript\
$python\
$raku\
$rlang\
$red\
$ruby\
$rust\
$scala\
$solidity\
$swift\
$terraform\
$vlang\
$vagrant\
$zig\
$buf\
$conda\
$meson\
$spack\
$memory_usage\
$aws\
$gcloud\
$openstack\
$azure\
$crystal\
$custom\
$status\
$os\
$battery\
$time"""
[fill]
symbol = ' '
[character]
format = "$symbol "
success_symbol = "[◎](bold italic bright-yellow)"
error_symbol = "[○](italic purple)"
vimcmd_symbol = "[■](italic dimmed green)"
# not supported in zsh
vimcmd_replace_one_symbol = "◌"
vimcmd_replace_symbol = "□"
vimcmd_visual_symbol = "▼"
[env_var.VIMSHELL]
format = "[$env_value]($style)"
style = 'green italic'
[sudo]
format = "[$symbol]($style)"
style = "bold italic bright-purple"
symbol = "⋈┈"
disabled = false
[username]
style_user = "bright-yellow bold italic"
style_root = "purple bold italic"
format = "[⭘ ](bold dimmed green)[$user]($style)"
disabled = false
show_always = true
[hostname]
ssh_only = false
format = '[@$hostname ]($style)'
style = "bold dimmed green"
[directory]
home_symbol = "⌂"
truncation_length = 2
truncation_symbol = "□ "
read_only = " ◈"
use_os_path_sep = true
style = "italic blue"
format = '[$path]($style)[$read_only]($read_only_style)'
repo_root_style = 'bold blue'
repo_root_format = '[$before_root_path]($before_repo_root_style)[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) [△](bold bright-blue)'
[cmd_duration]
min_time = 0
format = "[◄ $duration ](italic white)"
[jobs]
format = "[$symbol$number]($style) "
style = "white"
symbol = "[▶](blue italic)"
[localip]
ssh_only = true
format = " ◯[$localipv4](bold magenta)"
disabled = false
[time]
disabled = false
format = "[ $time]($style)"
time_format = "%R"
utc_time_offset = "local"
style = "italic dimmed white"
[battery]
format = "[ $percentage $symbol]($style)"
full_symbol = "█"
charging_symbol = "[↑](italic bold green)"
discharging_symbol = "↓"
unknown_symbol = "░"
empty_symbol = "▃"
[[battery.display]]
threshold = 20
style = "italic bold red"
[[battery.display]]
threshold = 60
style = "italic dimmed bright-purple"
[[battery.display]]
threshold = 70
style = "italic dimmed yellow"
[git_branch]
format = " [$branch(:$remote_branch)]($style)"
symbol = "[△](bold italic bright-blue)"
style = "italic bright-blue"
truncation_symbol = "⋯"
truncation_length = 11
ignore_branches = ["main", "master"]
only_attached = true
[git_metrics]
format = '([▴$added]($added_style))([▿$deleted]($deleted_style))'
added_style = 'italic dimmed green'
deleted_style = 'italic dimmed red'
ignore_submodules = true
disabled = false
[git_status]
style = "bold italic bright-blue"
format = "([⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥]($style))"
conflicted = "[◪◦](italic bright-magenta)"
ahead = "[▴│[${count}](bold white)│](italic green)"
behind = "[▿│[${count}](bold white)│](italic red)"
diverged = "[◇ ▴┤[${ahead_count}](regular white)│▿┤[${behind_count}](regular white)│](italic bright-magenta)"
untracked = "[◌◦](italic bright-yellow)"
stashed = "[◃◈](italic white)"
modified = "[●◦](italic yellow)"
staged = "[▪┤[$count](bold white)│](italic bright-cyan)"
renamed = "[◎◦](italic bright-blue)"
deleted = "[✕](italic red)"
[deno]
format = " [deno](italic) [∫ $version](green bold)"
version_format = "${raw}"
[lua]
format = " [lua](italic) [${symbol}${version}]($style)"
version_format = "${raw}"
symbol = "⨀ "
style = "bold bright-yellow"
[nodejs]
format = " [node](italic) [◫ ($version)](bold bright-green)"
version_format = "${raw}"
detect_files = ["package-lock.json", "yarn.lock"]
detect_folders = ["node_modules"]
detect_extensions = []
[python]
format = " [py](italic) [${symbol}${version}]($style)"
symbol = "[⌉](bold bright-blue)⌊ "
version_format = "${raw}"
style = "bold bright-yellow"
[ruby]
format = " [rb](italic) [${symbol}${version}]($style)"
symbol = "◆ "
version_format = "${raw}"
style = "bold red"
[rust]
format = " [rs](italic) [$symbol$version]($style)"
symbol = "⊃ "
version_format = "${raw}"
style = "bold red"
[package]
format = " [pkg](italic dimmed) [$symbol$version]($style)"
version_format = "${raw}"
symbol = "◨ "
style = "dimmed yellow italic bold"
[swift]
format = " [sw](italic) [${symbol}${version}]($style)"
symbol = "◁ "
style = "bold bright-red"
version_format = "${raw}"
[aws]
disabled = true
format = " [aws](italic) [$symbol $profile $region]($style)"
style = "bold blue"
symbol = "▲ "
[buf]
symbol = "■ "
format = " [buf](italic) [$symbol $version $buf_version]($style)"
[c]
symbol = " "
format = " [$symbol($version(-$name))]($style)"
[conda]
symbol = "◯ "
format = " conda [$symbol$environment]($style)"
[dart]
symbol = "◁◅ "
format = " dart [$symbol($version )]($style)"
[docker_context]
symbol = "◧ "
format = " docker [$symbol$context]($style)"
[elixir]
symbol = "△ "
format = " exs [$symbol $version OTP $otp_version ]($style)"
[elm]
symbol = "◩ "
format = " elm [$symbol($version )]($style)"
[golang]
symbol = "∩ "
format = " go [$symbol($version )]($style)"
[haskell]
symbol = "❯λ "
format = " hs [$symbol($version )]($style)"
[java]
symbol = " "
format = " java [${symbol}(${version} )]($style)"
[julia]
symbol = "◎ "
format = " jl [$symbol($version )]($style)"
[memory_usage]
symbol = "▪▫▪ "
format = " mem [${ram}( ${swap})]($style)"
[nim]
symbol = "▴▲▴ "
format = " nim [$symbol($version )]($style)"
[nix_shell]
style = 'bold italic dimmed blue'
symbol = '✶'
format = '[$symbol nix⎪$state⎪]($style) [$name](italic dimmed white)'
impure_msg = '[⌽](bold dimmed red)'
pure_msg = '[⌾](bold dimmed green)'
unknown_msg = '[◌](bold dimmed ellow)'
[spack]
symbol = "◇ "
format = " spack [$symbol$environment]($style)"

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

BIN
wallpapers/arcade.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 KiB

BIN
wallpapers/autumn-lake.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

BIN
wallpapers/balcony.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
wallpapers/black-hole.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 MiB

BIN
wallpapers/campfire.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 MiB

BIN
wallpapers/clouds.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 MiB

BIN
wallpapers/countryside.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

BIN
wallpapers/cozy-desk.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
wallpapers/crawlers.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
wallpapers/dark-clouds.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 KiB

BIN
wallpapers/disaster.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 KiB

BIN
wallpapers/dusk-sky.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
wallpapers/eclipse.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
wallpapers/evening-cats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
wallpapers/evening-city.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

BIN
wallpapers/evening-sky.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

BIN
wallpapers/firewatch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

BIN
wallpapers/forest-hill.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
wallpapers/fuji-car.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 MiB

BIN
wallpapers/fuji.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

BIN
wallpapers/gas-station.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
wallpapers/glade.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
wallpapers/gloomy-night.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
wallpapers/great-arch.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 KiB

BIN
wallpapers/gris-forest.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

BIN
wallpapers/gris-mirror.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
wallpapers/gris-steps.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

BIN
wallpapers/gris-tree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

BIN
wallpapers/hands.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
wallpapers/island.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 MiB

BIN
wallpapers/lady.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
wallpapers/larry.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
wallpapers/living-room.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

BIN
wallpapers/many-moons.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

BIN
wallpapers/monument.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
wallpapers/moon-dune.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

BIN
wallpapers/moor.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 MiB

BIN
wallpapers/morning-road.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
wallpapers/mountain.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 KiB

BIN
wallpapers/new-moon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

BIN
wallpapers/night-drive.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 MiB

BIN
wallpapers/peninsula.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 KiB

Some files were not shown because too many files have changed in this diff Show more