76 Commits
Author SHA1 Message Date
janishutz 589b3f45c7 feat: don't install npm deps for eslint for improved security 2026-08-19 14:47:12 +02:00
janishutz 784e1ad891 feat: fixed hyprland window resize binds 2026-08-19 10:22:41 +02:00
janishutz 2a81c8c879 feat!: remove trash alias for rm 2026-08-12 11:45:33 +02:00
janishutz 404c8afebc chore: more notes on going waybar again 2026-08-10 08:22:02 +02:00
janishutz 5a92554335 chore: add TODO 2026-08-10 08:14:15 +02:00
janishutz 708a9f26d2 feat!: improved fish aliases 2026-08-10 08:14:15 +02:00
janishutz 86aa15925f chore: remarks on config updates that are coming 2026-08-08 15:01:24 +02:00
janishutz e42275cb5b feat: go back to kitty as default 2026-08-03 15:29:39 +02:00
janishutz e90fe68d24 feat: move to alacritty as default terminal 2026-08-03 15:16:45 +02:00
janishutz ae331c5f63 feat: add postgres container to list of supported containers 2026-07-30 10:20:42 +02:00
janishutz c7780ea9d8 feat: pdf page script now reads dirs recursively 2026-07-27 14:46:17 +02:00
janishutz 08c3d41ff2 feat: improved pdf page count script 2026-07-26 14:47:18 +02:00
janishutz ecaab3e673 fix: special workspace used 2026-07-26 12:30:02 +02:00
janishutz 6d2306e3f7 feat: script to count pdf pages 2026-07-25 16:43:05 +02:00
janishutz 0ec2614799 fix: dev container script container selection 2026-07-25 06:54:30 +02:00
janishutz 62de408edd feat: reworked dev container script, many more features 2026-07-24 13:42:20 +02:00
janishutz 90bc568a06 feat: dev container startup script fixes and docker auto-start 2026-07-24 11:07:26 +02:00
janishutz dc2ed58d20 feat: windowrules for summaries pdfs 2026-07-22 10:25:33 +02:00
janishutz c404e5107e feat: dms settings updated 2026-07-21 11:45:24 +02:00
janishutz 0f848aa16c feat: improved dev env launcher script 2026-07-18 08:52:54 +02:00
janishutz 7e4c52d4d1 fix: improved workspace rules 2026-07-17 13:28:29 +02:00
janishutz 12622ce815 fix: workspace rule for workspace 10 2026-07-17 13:26:03 +02:00
janishutz 2ecc89b6b3 fix: windowrule for pdf readers 2026-07-17 09:34:43 +02:00
janishutz 682750bf63 feat: better binds 2026-07-17 09:04:29 +02:00
janishutz cad9b833ae feat: improved predictability 2026-07-17 08:48:46 +02:00
janishutz b99e6fe109 fix: bind for wallpaper picker 2026-07-13 13:23:21 +02:00
janishutz e7e7e7692e feat: wallpaper picker bind 2026-07-13 13:23:00 +02:00
janishutz d3f67649ca feat: better animations 2026-07-12 12:16:23 +02:00
janishutz e37d9f64be feat: group binds 2026-07-12 12:13:20 +02:00
janishutz c51f60064e feat: descriptions for hyprland binds 2026-07-11 09:12:24 +02:00
janishutz b11a8f82c6 feat: dms settings 2026-07-10 17:27:59 +02:00
janishutz e554d98510 fix: qt6ct config 2026-07-10 17:27:34 +02:00
janishutz fd4f36a3c9 feat: add more launch commands 2026-07-08 15:50:27 +02:00
janishutz 6123324a1b fix: fix group bars 2026-07-08 15:49:13 +02:00
janishutz e312c254e8 feat: much improved hyprland binds 2026-07-08 15:44:19 +02:00
janishutz 3bec7f4d9e feat: improved dms config 2026-07-07 18:31:26 +02:00
janishutz 4c14251eee feat: hyprtoolkit theme 2026-07-06 11:23:25 +02:00
janishutz 2570646b62 fix: save only screenshot bind fixed 2026-07-03 10:22:12 +02:00
janishutz 61c1ece03d fix: improved startup notifications 2026-07-03 08:08:13 +02:00
janishutz 3b9ded9cfd feat: script for dev containers 2026-07-02 09:29:34 +02:00
janishutz b1389e08c0 fix(latexindent): add missing repeat as indent 2026-06-23 17:41:03 +02:00
janishutz 925b530682 fix: indentconfig unbroken 2026-06-23 10:54:35 +02:00
janishutz 2daaee35e7 feat: set up indentconfig globally 2026-06-23 09:36:16 +02:00
janishutz 856de921a0 fix: improved toggle docked config 2026-06-23 08:52:44 +02:00
janishutz 21475d4dd7 feat: docked fallback now displays notification 2026-06-22 09:10:19 +02:00
janishutz 2f54941a80 feat: add protection against black screen on laptop with no screens connected 2026-06-22 06:53:43 +02:00
janishutz 4c05ddae93 feat: update bar menu 2026-06-20 07:57:10 +02:00
janishutz d019822a69 feat: fix workspace rules for docked 2026-06-20 07:56:15 +02:00
janishutz 0218fde26e feat: hyprlock theming 2026-06-18 19:54:54 +02:00
janishutz 3247c768ba feat: basic yazi theme 2026-06-18 18:14:12 +02:00
janishutz 53ceb85731 fix: wlogout fully fixed 2026-06-18 13:17:08 +02:00
janishutz 279975a806 fix: wlogout theme 2026-06-18 13:12:08 +02:00
janishutz 1e0a89d1a7 feat: hyprland notification for config type on load 2026-06-18 13:01:13 +02:00
janishutz 5a016f5427 feat: add dms config 2026-06-18 12:59:44 +02:00
janishutz 0a1124a246 fix: get laptop and docked configs working in hyprland 2026-06-18 12:05:02 +02:00
janishutz 2ca734a5c9 fix: some startup fixes 2026-06-18 11:58:24 +02:00
janishutz 50e62a256d fix: hyprland config apply 2026-06-18 11:55:56 +02:00
janishutz 6bdd4b8316 feat: dms config copying 2026-06-18 11:53:11 +02:00
janishutz 816d99a8ff fix: workspace rules 2026-06-18 11:46:26 +02:00
janishutz a776d1760a feat: simple install script until archmgr completed 2026-06-18 11:23:48 +02:00
janishutz b167d40039 fix: windowrules 2026-06-17 08:08:01 +02:00
janishutz be229a7069 fix: move back to hyprlock 2026-06-15 14:43:18 +02:00
janishutz 0f04a7f983 fix: windowrules 2026-06-15 14:33:56 +02:00
janishutz 277da5187b chore: todo 2026-06-15 12:12:54 +02:00
janishutz aeed3ecd88 fix: launch commands, notes, fix termfilepicker 2026-06-15 11:25:03 +02:00
janishutz 8df7e679d4 fix: small fixes for wlogout, etc 2026-06-15 10:23:09 +02:00
janishutz 03744cf4c3 feat: add wlogout back in 2026-06-15 10:13:29 +02:00
janishutz 7240eefc76 fix: submap naming 2026-06-15 10:10:25 +02:00
janishutz a895222cde fix: hyprland fixes 2026-06-15 09:44:31 +02:00
janishutz 9da8cf8fcf fix: small tweaks 2026-06-15 09:23:55 +02:00
janishutz e4a6ceaa4d fix: more keybind cleanup, remove hyprlock 2026-06-15 09:18:17 +02:00
janishutz bd10041d28 fix: remove accidental exit hyprland bind 2026-06-15 08:51:19 +02:00
janishutz fab293438e feat: updates to make it work 2026-06-14 20:42:49 +02:00
janishutz dce3c77a29 feat: finish migrate 2026-06-14 18:20:19 +02:00
janishutz 04a5d8919c feat: todos, decman config almost complete 2026-06-14 17:58:00 +02:00
janishutz e74b162b91 feat: move to DankMaterialShell, remove quickshell config updates 2026-06-14 15:12:24 +02:00
105 changed files with 3970 additions and 1731 deletions

No files matched your search

+30 -21
View File
@@ -9,25 +9,23 @@ For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
*Screenshot outdated, a new screenshot will be added when this update is completed*
![screenshot of desktop with 2 screens](./assets/screenshot.png)
The whole desktop will likely eventually move back to Waybar (because it has evolved massively since I last used it and now supports custom menus)
DankMaterialShell is a stop-gap solution, which, albeit it looking nice,
doesn't go well with my ethos of using non-slop programs.
Luckily, I can keep most of my configs when moving to something else, because I will be using Matugen.
The plan is to use some of the config templates from DMS (or some other source) for matugen for my own desktop with some changes
Furthermore, my system may migrate to NixOS by early September 2026, to finally have my laptop and desktop configs synced properly
## Features
- QuickShell-based status bar and QuickActions menu (Coming soon)
- QuickShell-based
- Astal4 based Status Bar and Quick Actions menu
- System info
- Hyprland info
- Date & Time
- Bluetooth picker
- some networking settings (more coming later)
- Audio and brightness control
- battery monitoring
- Logout, Reboot, Shutdown, etc
- `hyprlauncher` for the app launcher
- Wlogout config
- DankMaterialShell
- Automatically generated GTK Theme and theming of the rest of the desktop using `matugen`
- Fish config (with some handy aliases, based on one from ohh-my-fish)
- Fastfetch config
- kitty config with cursor trail
- alacritty config
- notification manager uses `swaync`
- Linter configs (eslint, clang-format, latexindent and more)
- mpv config
@@ -36,11 +34,22 @@ For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
## TODOs
- [ ] Migrate status bar to QuickShell
- [ ] Rewrite Hyprland configs using lua
- [ ] Waylogout still needed?
- [ ] Add the formatter configs back in
- [ ] Add the scripts back in
- [ ] Finish decman configuration to copy all the files
- [ ] Custom yazi theme
- [ ] Notifier
- [ ] Migrate back to Waybar
- [X] Rewrite Hyprland configs using lua
- [X] Waylogout still needed?
- [X] Add the formatter configs back in
- [X] Add the scripts back in
- [ ] ~Finish decman configuration to copy all the files~
- [X] Custom yazi theme
- [ ] Notifier (swaync??)
- [ ] Launcher (hyprlauncher??)
- [ ] dgop as hw monitor
- [ ] No need for nm-applet (even with waybar -> nmcli or nmtui)
- [ ] Adapt the GTK, etc config from DMS for my own design
- [ ] Update neovim design
- [ ] Nix config
- [ ] home-manager or what for dotfiles management on nix?
- [ ] Yazi more directory links
- [ ] Hyprland keybind panel?
- [ ] Migrate to zsh (or another POSIX compliant shell)
- [ ] Wallpaper picker (for regenerating stuff using matugen). TUI using kitty graphics? Or any lightweight toolkit?
+16
View File
@@ -0,0 +1,16 @@
# TODOs
- [X] Notifications management via dms
- [X] Launcher via dms
- [X] DMS screenshots
- [X] Hyprland theming using mutagen with dms integration
- [ ] DMS config sync to here using script
- [ ] Remove `decman` because it's a pain and use smaller scope `archmgr` (only copy all files to locations always and package diff)
- [ ] Generate matugen stuff from colour in new script
- [X] Binds for other DMS features (with subcommand)
- [X] Finish decman config
- [X] Remove wlogout and replace with dms setup
- [ ] Yazi theming
- [X] Kitty theming
- [ ] Fish theming
- [ ] Fastfetch theming
- [X] DMS instead of Hyprlock for locker?
+10 -5
View File
@@ -1,5 +1,10 @@
grub_theme = "/usr/share/grub/themes/monterey-grub-theme/theme.txt"
grub_os_prober = True
kernel_args_all = ""
kernel_args_debug_only = ""
kernel_args_normal_only = ""
grub_theme = {
"desktop": "/usr/share/grub/themes/monterey-grub-theme/theme.txt",
"laptop": "/usr/share/grub/themes/monterey-grub-theme/theme.txt",
}
grub_os_prober = {"desktop": True, "laptop": False}
kernel_args_all = {"desktop": "", "laptop": ""}
kernel_args_debug_only = {"desktop": "", "laptop": ""}
kernel_args_normal_only = {"desktop": "", "laptop": ""}
user = "janis"
+10
View File
@@ -0,0 +1,10 @@
[general]
import = [
"~/.config/alacritty/dank-theme.toml"
]
[font]
normal = {
family = "Source Code Pro", style = "Regular"
}
size = 12.0
+31
View File
@@ -0,0 +1,31 @@
[colors.primary]
background = '#0e1513'
foreground = '#dde4e1'
[colors.selection]
text = '#dde4e1'
background = '#005049'
[colors.cursor]
text = '#0e1513'
cursor = '#82d5c9'
[colors.normal]
black = '#0e1513'
red = '#f49c6e'
green = '#6ad571'
yellow = '#fff372'
blue = '#6bcabc'
magenta = '#1c6258'
cyan = '#82d5c9'
white = '#d2dfdd'
[colors.bright]
black = '#808a88'
red = '#ffc09f'
green = '#a5ffab'
yellow = '#fff7a5'
blue = '#9ceadf'
magenta = '#b9fff4'
cyan = '#d2fff8'
white = '#f8fffe'
+13 -19
View File
@@ -1,38 +1,26 @@
alias ls='ls -l --color'
alias ll='ls -la --color'
alias v='nvim'
alias i='vimiv'
alias c='clear'
alias cv='clear && nvim'
alias zs='zathura-sandbox'
alias z='zathura'
alias bt='bashtop'
alias vicfg='nvim ~/projects/nvim/'
alias fm='thunar .'
alias gl='git ls-files --others --exclude-standard'
alias gm='git ls-files -m'
alias gpu='git push'
alias gp='git pull'
alias gpr='git pull --rebase'
alias gc='git commit -a -m'
alias ga='git add ./*'
alias cfh='nvim ~/projects/dotfiles/config/hypr/'
alias cfn='nvim ~/projects/nvim/'
alias cff='nvim ~/projects/dotfiles/config/fish/'
alias cfa='nvim ~/projects/dotfiles/config/astal/'
alias cf='nvim ~/projects/dotfiles/'
alias cfh='nvim ~/projects/system/dotfiles/config/hypr/'
alias cfn='nvim ~/projects/system/nvim/'
alias cff='nvim ~/projects/system/dotfiles/config/fish/'
alias cfa='nvim ~/projects/system/dotfiles/config/astal/'
alias cf='nvim ~/projects/system/dotfiles/'
alias g='lazygit'
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
alias ai='ollama serve'
alias ff='fastfetch'
alias p='nvimpager -p'
alias latexdocs='zathura ~/projects/latex/docs/docs.pdf &>> /dev/null & disown'
alias gccerr='gcc -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes -std=c99'
alias linecount='cloc --vcs git .'
alias flutter='fvm flutter'
# Add scripts in ~/projects/dotfiles/scripts/ to path
fish_add_path -P ~/projects/dotfiles/scripts/
# Add custom scripts to path
fish_add_path -P ~/projects/system/dotfiles/scripts/
function y
set tmp (mktemp -t "yazi-cwd.XXXXXX")
@@ -133,3 +121,9 @@ end
end
set -g fish_greeting ""
set -g VIRTUAL_ENV_DISABLE_PROMPT true
# TODO: Source all
for file in ~/projects/system/dotfiles/system/completions/*
source $file
end
+29 -17
View File
@@ -1,33 +1,45 @@
-- Determine current platform
--- Trim a string
---@param s string the string to process
---@return string
local function trim_string(s)
return s:match("^%s*(.*)"):match("(.-)%s*$")
end
local is_docked = false
local laptop_config = false
local read_platform = pcall(function()
io.popen("cat ~/.config/janishutz/platform-laptop")
end)
local read_docked = pcall(function()
io.popen("cat ~/.config/janishutz/docked")
end)
local read_platform = trim_string(io.popen("cat ~/.config/janishutz/platform"):read("a")) == "l"
local read_docked = trim_string(io.popen("cat ~/.config/janishutz/docked"):read("a")) == "y"
if read_platform then
laptop_config = true
laptop_config = true
end
if read_docked then
laptop_config = true
if read_docked and laptop_config then
is_docked = true
end
if is_docked and #hl.get_monitors() <= 1 then
hl.notification.create({
text = "Emergency docked mode fallback initiated: No external displays detected",
timeout = 5000,
})
is_docked = false
end
-- Core
require("colors")
require("hyprland.colors")
require("hyprland.core.general")
require("hyprland.core.input")(laptop_config)
require("hyprland.core.input")(laptop_config and not is_docked)
require("hyprland.core.group")
require("hyprland.core.misc")
require("hyprland.core.style")
-- Binds
require("hyprland.binds.device")(laptop_config)
require("hyprland.binds.main")
require("hyprland.binds.device")
require("hyprland.binds.groups")
require("hyprland.binds.launch")
require("hyprland.binds.main")
require("hyprland.binds.group-launch")
require("hyprland.binds.notifications")
require("hyprland.binds.screenshot")
require("hyprland.binds.window")
@@ -40,15 +52,15 @@ require("hyprland.windowrules.tags")
require("hyprland.windowrules.workspaces")
-- Workspace rules
require("hyprland.workspacerules.main")
require("hyprland.workspacerules.main")(laptop_config, is_docked)
-- Monitors
require("hyprland.monitors")(laptop_config, is_docked)
-- Execs
require("hyprland.execs")
require("hyprland.execs")(laptop_config)
hl.device({
name = "pnp0c50:00-093a:0255-touchpad",
enabled = true,
name = "pnp0c50:00-093a:0255-touchpad",
enabled = true,
})
+63 -49
View File
@@ -1,50 +1,64 @@
return function(is_laptop)
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.define_submap("device", function()
hl.bind("m", function()
hl.dispatch(hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"))
exit_submap()
end)
if is_laptop then
hl.bind("d", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Set to mirror internal display' --app-name'Hyprctl'"))
hl.monitor({
output = "HDMI-A-1",
mirror = "eDP-1",
})
exit_submap()
end)
hl.bind("e", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Set to expand internal display' --app-name'Hyprctl'"))
hl.monitor({
output = "HDMI-A-1",
mirror = "",
})
exit_submap()
end)
end
hl.bind("Shift + T", function ()
hl.device({
name = "pnp0c50:00-093a:0255-touchpad",
enabled = false
})
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Disabled Trackpad' --app-name='Hyprctl'"))
end)
hl.bind("T", function ()
hl.device({
name = "pnp0c50:00-093a:0255-touchpad",
enabled = true
})
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Enabled Trackpad' --app-name='Hyprctl'"))
end)
hl.bind("Escape", function()
exit_submap()
end)
end)
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
-- TODO: Update this for laptop
hl.bind("code:232", hl.dsp.exec_cmd("brightnessctl -S"), { description = "Doesn't do anything yet" })
-- bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%'
-- bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%'
hl.bind("code:123", hl.dsp.exec_cmd("pamixer -i 5"), { description = "Increase volume by 5%" })
hl.bind("code:122", hl.dsp.exec_cmd("pamixer -d 5"), { description = "Decrease volume by 5%" })
hl.bind("code:121", hl.dsp.exec_cmd("pamixer t"), { description = "Open mixer" })
hl.define_submap("device", function()
hl.bind("m", function()
hl.dispatch(hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"))
exit_submap()
end, { description = "Toggle mute for default audio input device" })
-- Touchpad
hl.bind("SHIFT + T", function()
hl.device({
name = "pnp0c50:00-093a:0255-touchpad",
enabled = false,
})
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Disabled Trackpad' --app-name='Hyprctl'"))
end, { description = "Disable trackpad" })
hl.bind("T", function()
hl.device({
name = "pnp0c50:00-093a:0255-touchpad",
enabled = true,
})
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Enabled Trackpad' --app-name='Hyprctl'"))
end, { description = "Enable trackpad" })
-- ── DMS controls ─────────────────────────────────────────────────
-- clipboard history
hl.bind("h", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call clipboard toggle"))
exit_submap()
end, { description = "Toggle clipboard history panel" })
-- Dash
hl.bind("d", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call dash toggle"))
exit_submap()
end, { description = "Toggle DMS dash (top left)" })
-- Wallpaper
hl.bind("w", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call dankdash wallpaper"))
exit_submap()
end, { description = "Open DMS wallpaper picker" })
-- Settings
hl.bind("s", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call settings toggle"))
exit_submap()
end, { description = "Toggle DMS settings" })
hl.bind("Escape", function()
exit_submap()
end)
end)
@@ -0,0 +1,31 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.define_submap("groupedlaunch", function()
hl.bind("e", function()
hl.exec_cmd("systemctl start docker")
hl.exec_cmd("kitty ~/projects/eth/projects/eyetap/", { workspace = 1 })
hl.exec_cmd("kitty ~/projects/eth/projects/eyetap/backend/", { workspace = 10 })
hl.exec_cmd("kitty ~/projects/eth/projects/eyetap/frontend/", { workspace = 10 })
hl.exec_cmd("librewolf http://localhost:8081")
exit_submap()
end, { description = "Launch programs for EYE-TAP development" })
hl.bind("s", function()
hl.exec_cmd("kitty ~/projects/eth/eth-summaries/", { workspace = 1 })
hl.exec_cmd("kitty ~/NextCloud/Documents/ETH/Semester4/", { workspace = 3 })
exit_submap()
end, { description = "Launch programs to write ETH summaries" })
hl.bind("b", function()
hl.exec_cmd("alvr_dashboard", { workspace = 1 })
hl.exec_cmd("/opt/BSManager/bs-manager", { workspace = 2 })
hl.exec_cmd("steam", { workspace = 3 })
exit_submap()
end, { description = "Launch everything for BeatSaber" })
hl.bind("Escape", function()
exit_submap()
end)
end)
+13 -10
View File
@@ -2,39 +2,42 @@ local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.bind("Super + Q", hl.dsp.exit())
hl.bind("SUPER + SHIFT + H", hl.dsp.group.prev(), { description = "Go to previous group member" })
hl.bind("SUPER + SHIFT + L", hl.dsp.group.next(), { description = "Go to next group member" })
-- TODO: Improve mapping (also global mapping, for moving between els if to use regularly)
-- Improve colours
hl.define_submap("groups", function()
hl.bind("c", function()
hl.dispatch(hl.dsp.group.toggle())
exit_submap()
end)
end, { description = "Toggle group" })
hl.bind("l", function()
hl.dispatch(hl.dsp.group.next())
exit_submap()
end)
end, { description = "Go to next group member" })
hl.bind("h", function()
hl.dispatch(hl.dsp.group.prev())
exit_submap()
end)
end, { description = "Go to previous group member" })
hl.bind("Ctrl + L", function()
hl.bind("CTRL + L", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Group locking toggled' --app-name='Hyprtclt'"))
hl.dispatch(hl.dsp.group.lock_active())
exit_submap()
end)
end, { description = "Toggle group lock" })
hl.bind("Shift + L", function()
hl.bind("SHIFT + L", function()
hl.dispatch(hl.dsp.window.move({ into_or_create_group = "r" }))
exit_submap()
end)
end, { description = "Move window into group to right" })
hl.bind("Shift + H", function()
hl.bind("SHIFT + H", function()
hl.dispatch(hl.dsp.window.move({ into_or_create_group = "l" }))
exit_submap()
end)
end, { description = "Move window into group to left" })
hl.bind("Escape", function()
exit_submap()
+16 -14
View File
@@ -3,46 +3,48 @@ local function exit_submap()
end
local function launcher(program)
return function ()
return function()
hl.dispatch(hl.dsp.exec_cmd(program))
exit_submap()
end
end
hl.bind("SUPER + Return", launcher("kitty"))
hl.define_submap("launch", function()
-- Librewolf
hl.bind("l", launcher("librewolf"))
hl.bind("l", launcher("librewolf"), { description = "Launch Librewolf" })
-- Steam
hl.bind("s", launcher("steam"))
hl.bind("s", launcher("steam"), { description = "Launch Steam" })
-- Discord
hl.bind("d", launcher("vesktop"))
hl.bind("d", launcher("vesktop"), { description = "Launch Discord" })
-- Kitty
hl.bind("k", launcher("kitty"))
hl.bind("Return", launcher("kitty"))
hl.bind("k", launcher("kitty"), { description = "Launch kitty" })
hl.bind("Return", launcher("kitty"), { description = "Launch kitty" })
-- Filezilla
hl.bind("f", launcher("filezilla"))
hl.bind("f", launcher("filezilla"), { description = "Launch Filezilla" })
-- Thunderbird
hl.bind("t", launcher("thunderbird"))
hl.bind("t", launcher("thunderbird"), { description = "Launch Thunderbird" })
-- Zathura
hl.bind("z", launcher("zathura"))
hl.bind("z", launcher("zathura"), { description = "Launch Zathura (pdf)" })
-- Brave
hl.bind("Shift + B", launcher("brave"))
hl.bind("SHIFT + B", launcher("brave"), { description = "Launch Brave" })
-- bsmanager
hl.bind("b", launcher("/opt/bs-manager/bs-manager"))
hl.bind("b", launcher("/opt/BSManager/bs-manager"), { description = "Launch BSManager" })
-- ALVR
hl.bind("p", launcher("alvr_dashboard"))
hl.bind("p", launcher("alvr_dashboard"), { description = "Launch ALVR" })
-- Qalculate
hl.bind("c", launcher("qalculate-qt"))
hl.bind("c", launcher("qalculate-qt"), { description = "Launch Qalculate!" })
-- AirPlay
hl.bind("a", function()
@@ -53,7 +55,7 @@ hl.define_submap("launch", function()
)
)
exit_submap()
end)
end, { description = "Launch AirPlay server" })
-- Escape
hl.bind("Escape", function()
+15 -9
View File
@@ -1,9 +1,15 @@
hl.bind("Super + X", hl.dsp.submap("launch"))
hl.bind("Super + D", hl.dsp.submap("device"))
hl.bind("Super + C", hl.dsp.submap("notifications"))
hl.bind("Super + G", hl.dsp.submap("groups"))
hl.bind("Super + S", hl.dsp.submap("screenshot"))
hl.bind("Super + W", hl.dsp.submap("window"))
hl.bind("Super + A", hl.dsp.submap("workspace"))
hl.bind("Super + Space", hl.dsp.exec_cmd("hyprlauncher"))
hl.bind("Super + Escape", hl.dsp.exec_cmd("wlogout"))
hl.bind("SUPER + X", hl.dsp.submap("launch"), { description = "Launching programs" })
hl.bind("SUPER + D", hl.dsp.submap("device"), { description = "Device controls" })
hl.bind("SUPER + C", hl.dsp.submap("notifications"), { description = "Notifications management" })
hl.bind("SUPER + G", hl.dsp.submap("groups"), { description = "Window group management" })
hl.bind("SUPER + S", hl.dsp.submap("screenshot"), { description = "Screenshots" })
hl.bind("SUPER + W", hl.dsp.submap("window"), { description = "Window management" })
hl.bind("SUPER + A", hl.dsp.submap("workspace"), { description = "Workspace controls" })
hl.bind("SUPER + P", hl.dsp.submap("groupedlaunch"), { description = "Launch groups of programs" })
hl.bind("SUPER + Q", hl.dsp.window.close(), { description = "Close active window" })
hl.bind("SUPER + Space", hl.dsp.exec_cmd("dms ipc call spotlight toggle"), { description = "Toggle app launcher" })
hl.bind("SUPER + SHIFT + Space", hl.dsp.exec_cmd("dms ipc call spotlight-bar toggle"), { description = "Toggle app launcher as small bar" })
hl.bind("SUPER + Escape", hl.dsp.exec_cmd("wlogout"), { description = "Toggle logout screen" })
hl.bind("SUPER + I", hl.dsp.exec_cmd("dms ipc call control-center open"), { description = "Toggle control centre" })
hl.bind("SUPER + CTRL + H", hl.dsp.exec_cmd("dms ipc call keybinds toggle hyprland"), { description = "Toggle keybinds panel" })
+15 -10
View File
@@ -4,29 +4,34 @@ end
hl.define_submap("notifications", function()
hl.bind("c", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client --hide-all"))
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications dismissAllPopups"))
exit_submap()
end)
end, { description = "Hide notifications" })
hl.bind("d", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client --clear-all"))
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications clearAll"))
exit_submap()
end)
end, { description = "Delete all notifications" })
hl.bind("m", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications toggleDoNotDisturb"))
exit_submap()
end, { description = "Toggle Do Not Disturb" })
hl.bind("h", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client -cp"))
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications close"))
exit_submap()
end)
end, { description = "Close notification panel" })
hl.bind("s", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client -op"))
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications open"))
exit_submap()
end)
end, { description = "Open notification panel" })
hl.bind("t", function()
hl.dispatch(hl.dsp.exec_cmd("swaync-client -t"))
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications toggle"))
exit_submap()
end)
end, { description = "Toggle notification panel" })
hl.bind("Escape", function()
exit_submap()
+15 -15
View File
@@ -4,34 +4,34 @@ end
hl.define_submap("screenshot", function()
hl.bind("y", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copy area"))
hl.dispatch(hl.dsp.exec_cmd("dms screenshot --no-file"))
exit_submap()
end)
end, { description = "Take sceenshot of are and Yank" })
hl.bind("c", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copysave area"))
hl.dispatch(hl.dsp.exec_cmd("dms screenshot"))
exit_submap()
end)
end, { description = "Take screenshot of area, yank and save" })
hl.bind("s", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify save area"))
hl.dispatch(hl.dsp.exec_cmd("dms screenshot --no-clipboard"))
exit_submap()
end)
end, { description = "Take screenshot of area and Save" })
hl.bind("Shift + y", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copy screen"))
hl.bind("SHIFT + y", function()
hl.dispatch(hl.dsp.exec_cmd("dms screenshot full --no-file"))
exit_submap()
end)
end, { description = "Take screenshot and Yank" })
hl.bind("Shift + c", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copysave screen"))
hl.bind("SHIFT + c", function()
hl.dispatch(hl.dsp.exec_cmd("dms screenshot full"))
exit_submap()
end)
end, { description = "Take sceenshot, yank and save" })
hl.bind("Shift + s", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify save screen"))
hl.bind("SHIFT + s", function()
hl.dispatch(hl.dsp.exec_cmd("dms screenshot full --no-clipboard"))
exit_submap()
end)
end, { description = "Take screenshot and Save" })
hl.bind("Escape", function()
exit_submap()
+22 -11
View File
@@ -2,39 +2,50 @@ local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
end
hl.bind("Super + Q", hl.dsp.exit())
hl.bind("SUPER + mouse:272", hl.dsp.window.drag())
hl.bind("SUPER + mouse:273", hl.dsp.window.resize())
hl.define_submap("window", function()
-- Close window
hl.bind("x", function()
hl.dispatch(hl.dsp.exit())
hl.dispatch(hl.dsp.window.close())
exit_submap()
end)
end, { description = "Close active window" })
hl.bind("q", function()
hl.dispatch(hl.dsp.exit())
hl.dispatch(hl.dsp.window.close())
exit_submap()
end)
end, { description = "Close active window" })
-- Fullscreen
hl.bind("f", function()
hl.dispatch(hl.dsp.window.fullscreen({ mode = "fullscreen" }))
exit_submap()
end)
end, { description = "Toggle fullscreen" })
-- Floating
hl.bind("v", function()
hl.dispatch(hl.dsp.window.float())
exit_submap()
end)
end, { description = "Toggle floating" })
-- Center
hl.bind("c", function()
hl.dispatch(hl.dsp.window.center())
exit_submap()
end)
end, { description = "Centre window (when floating)" })
hl.bind("Shift + K", function()
-- Kill
hl.bind("SHIFT + K", function()
hl.dispatch(hl.dsp.exec_cmd("notify-send 'Insta-Kill activated' --app-name='Hyprtclt'"))
hl.dispatch(hl.dsp.exec_cmd("hyprctl kill"))
exit_submap()
end)
end, { description = "Activate insta-kill" })
-- Resize
hl.bind("l", hl.dsp.window.resize({ x = 10, y = 0, relative = true }), { description = "Increase size horizontally" })
hl.bind("h", hl.dsp.window.resize({ x = -10, y = 0, relative = true }), { description = "Decrease size horizontally" })
hl.bind("j", hl.dsp.window.resize({ x = 0, y = 10, relative = true }), { description = "Increase size vertically" })
hl.bind("k", hl.dsp.window.resize({ x = 0, y = -10, relative = true }), { description = "Decrease size vertically" })
hl.bind("Escape", function()
exit_submap()
+55 -25
View File
@@ -1,38 +1,68 @@
local function exit_submap()
hl.dispatch(hl.dsp.submap("reset"))
hl.dispatch(hl.dsp.submap("reset"))
end
local function add_workspace_keymap(bind_goto, bind_move, num)
hl.bind(
bind_goto,
hl.dsp.focus({ workspace = tostring(num) }),
{ description = "Go to workspace " .. tostring(num) }
)
hl.bind(
bind_move,
hl.dsp.window.move({ workspace = tostring(num), follow = 1 }),
{ description = "Move window to workspace " .. tostring(num) }
)
end
for i = 1, 10, 1 do
hl.bind("Super + " .. tostring(i % 10), hl.dsp.focus({ workspace = tostring(i) }))
hl.bind("Super + Shift + " .. tostring(i % 10), hl.dsp.window.move({ workspace = tostring(i), follow = 1 }))
add_workspace_keymap("SUPER + " .. tostring(i % 10), "SUPER + SHIFT + " .. tostring(i % 10), i)
end
-- Super + - for 11th workspace
add_workspace_keymap("SUPER + code:20", "SUPER + SHIFT + code:20", 11)
hl.bind("Super + h", hl.dsp.focus({ direction = "l" }))
hl.bind("Super + l", hl.dsp.focus({ direction = "r" }))
hl.bind("Super + j", hl.dsp.focus({ direction = "d" }))
hl.bind("Super + k", hl.dsp.focus({ direction = "u" }))
hl.bind("SUPER + h", hl.dsp.focus({ direction = "l" }), { description = "Focus next window to left" })
hl.bind("SUPER + l", hl.dsp.focus({ direction = "r" }), { description = "Focus next window to right" })
hl.bind("SUPER + j", hl.dsp.focus({ direction = "d" }), { description = "Focus next window below" })
hl.bind("SUPER + k", hl.dsp.focus({ direction = "u" }), { description = "Focus next window above" })
hl.bind("Super + M", hl.dsp.workspace.toggle_special("main"))
hl.bind("Super + Shift + M", hl.dsp.window.move({ workspace = "special:main" }))
hl.bind("SUPER + M", hl.dsp.workspace.toggle_special("main"), { description = "Toggle main special workspace" })
hl.bind(
"SUPER + SHIFT + M",
hl.dsp.window.move({ workspace = "special:main" }),
{ description = "Move window to main special workspace" }
)
hl.define_submap("notifications", function()
for i = 1, 10, 1 do
hl.bind(tostring(i % 10), hl.dsp.focus({ workspace = tostring(i) }))
hl.bind("Shift + " .. tostring(i % 10), hl.dsp.window.move({ workspace = tostring(i), follow = 1 }))
end
hl.define_submap("workspace", function()
for i = 1, 10, 1 do
add_workspace_keymap(tostring(i % 10), "SHIFT + " .. tostring(i % 10), i)
end
add_workspace_keymap("code:20", "SHIFT + code:20", 11)
hl.bind("h", hl.dsp.focus({ direction = "l" }))
hl.bind("l", hl.dsp.focus({ direction = "r" }))
hl.bind("j", hl.dsp.focus({ direction = "d" }))
hl.bind("k", hl.dsp.focus({ direction = "u" }))
hl.bind("h", hl.dsp.focus({ direction = "l" }), { description = "Focus next window to left" })
hl.bind("l", hl.dsp.focus({ direction = "r" }), { description = "Focus next window to right" })
hl.bind("j", hl.dsp.focus({ direction = "d" }), { description = "Focus next window below" })
hl.bind("k", hl.dsp.focus({ direction = "u" }), { description = "Focus next window above" })
hl.bind("Shift + l", hl.dsp.window.move({ workspace = "+1", follow = 1 }))
hl.bind("Shift + h", hl.dsp.window.move({ workspace = "-1", follow = 1 }))
hl.bind(
"SHIFT + l",
hl.dsp.window.move({ workspace = "+1", follow = 1 }),
{ description = "Move one workspace up" }
)
hl.bind(
"SHIFT + h",
hl.dsp.window.move({ workspace = "-1", follow = 1 }),
{ description = "Move one workspace down" }
)
hl.bind("M", hl.dsp.workspace.toggle_special("main"))
hl.bind("Shift + M", hl.dsp.window.move({ workspace = "special:main" }))
hl.bind("M", hl.dsp.workspace.toggle_special("main"), { description = "Toggle main special workspace" })
hl.bind(
"SHIFT + M",
hl.dsp.window.move({ workspace = "special:main" }),
{ description = "Move window to main special workspace" }
)
hl.bind("Escape", function()
exit_submap()
end)
hl.bind("Escape", function()
exit_submap()
end)
end)
+19
View File
@@ -0,0 +1,19 @@
hl.config({
general = {
col = {
active_border = { colors = { "rgba(ffaabbcc)", "rgba(ffaabbcc)", "rgba(ffaabbcc)" }, angle = 45 },
inactive_border = "rgba(ffaabb33)",
},
},
group = {
col = {
border_active = "rgba(ffaabb77)",
border_inactive = "rgba(ffaabb33)",
},
},
decoration = {
shadow = {
color = "rgba(ffffff20)",
},
},
})
+44 -44
View File
@@ -1,51 +1,51 @@
--- @param swap_escape boolean
return function(swap_escape)
hl.config({
inputs = {
kb_options = swap_escape and "caps:swapescape" or "",
kb_layout = "us",
kb_variant = "altgr-intl",
natural_scroll = "true",
--- @param laptop_config boolean
return function(laptop_config)
hl.config({
input = {
kb_options = laptop_config and "caps:swapescape" or "",
kb_layout = "us",
kb_variant = "altgr-intl",
natural_scroll = true,
numlock_by_default = true,
repeat_delay = 400,
numlock_by_default = true,
repeat_delay = 400,
follow_mouse = 2,
mouse_refocus = true,
scroll_factor = 2,
accel_profile = "flat",
follow_mouse = 2,
mouse_refocus = true,
scroll_factor = 2,
accel_profile = "flat",
touchpad = {
disable_while_typing = true,
natural_scroll = true,
scroll_factor = 4,
},
touchpad = {
disable_while_typing = true,
natural_scroll = true,
scroll_factor = 4,
},
focus_on_close = 1,
focus_on_close = true,
sensitivity = 0,
},
gestures = {
workspace_swipe_distance = 200,
workspace_swipe_cancel_ratio = 0.3,
workspace_swipe_forever = true,
workspace_swipe_direction_lock = false,
},
})
sensitivity = 0,
},
gestures = {
workspace_swipe_distance = 200,
workspace_swipe_cancel_ratio = 0.3,
workspace_swipe_forever = true,
workspace_swipe_direction_lock = false,
},
})
hl.gesture({
fingers = 3,
direction = "horizontal",
action = "workspace",
})
hl.gesture({
fingers = 3,
direction = "down",
action = "close",
})
hl.gesture({
fingers = 3,
direction = "up",
action = "fullscreen",
})
hl.gesture({
fingers = 3,
direction = "horizontal",
action = "workspace",
})
hl.gesture({
fingers = 3,
direction = "down",
action = "close",
})
hl.gesture({
fingers = 3,
direction = "up",
action = "fullscreen",
})
end
+1 -2
View File
@@ -9,12 +9,11 @@ hl.config({
allow_session_lock_restore = true,
},
dwindle = {
pseudotile = true,
force_split = 2,
preserve_split = true,
},
binds = {
workspace_back_and_forth = true,
workspace_back_and_forth = false,
},
cursor = {
no_warps = false,
+55 -44
View File
@@ -1,70 +1,81 @@
hl.config({
decoration = {
inactive_opacity = 1,
rounding = 10,
decoration = {
inactive_opacity = 1,
rounding = 10,
shadow = {
enabled = true,
range = 4,
},
shadow = {
enabled = true,
range = 4,
},
blur = {
enabled = true,
xray = true,
new_optimizations = true,
size = 1,
passes = 2,
},
blur = {
enabled = true,
xray = true,
new_optimizations = true,
size = 1,
passes = 2,
},
dim_inactive = true,
dim_strength = 0.1,
-- TODO: Consider adding glow?
},
animations = {
enabled = true,
},
dim_inactive = true,
dim_strength = 0.1,
-- TODO: Consider adding glow?
},
animations = {
enabled = true,
},
})
hl.curve("main-bezier", {
type = "bezier",
points = { { 0.05, 0.9 }, { 0.1, 1.05 } },
type = "bezier",
points = { { 0.05, 0.9 }, { 0.1, 1.05 } },
})
hl.animation({
leaf = "windowsIn",
enabled = true,
bezier = "main-bezier",
speed = 3,
leaf = "windows",
enabled = true,
bezier = "main-bezier",
speed = 3,
})
hl.animation({
leaf = "windowsOut",
enabled = true,
bezier = "main-bezier",
speed = 4,
style = "popin 80%"
leaf = "windowsOut",
enabled = true,
bezier = "main-bezier",
speed = 4,
style = "popin 80%",
})
hl.animation({
leaf = "border",
enabled = true,
speed = 8,
leaf = "border",
enabled = true,
bezier = "default",
speed = 8,
})
hl.animation({
leaf = "fade",
enabled = true,
speed = 3,
leaf = "fade",
enabled = true,
bezier = "default",
speed = 3,
})
hl.animation({
leaf = "workspace",
enabled = true,
speed = 1,
leaf = "workspaces",
enabled = true,
bezier = "default",
speed = 1,
})
hl.animation({
leaf = "specialWorkspace",
enabled = true,
speed = 1,
leaf = "specialWorkspace",
enabled = true,
bezier = "default",
speed = 1,
})
hl.animation({
leaf = "fadeDpms",
enabled = true,
bezier = "default",
speed = 4,
})
+28 -14
View File
@@ -1,14 +1,28 @@
hl.on("hyprland.start", function()
-- hl.exec_cmd("~/.config/hypr/xdg-portal-hyprland")
-- hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY")
-- hl.exec_cmd("systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
hl.exec_cmd("systemctl --user start hyprpolkitagent")
hl.exec_cmd("hypridle")
hl.exec_cmd("hyprpaper")
hl.exec_cmd("hyprlauncher -d")
hl.exec_cmd("nm-applet")
hl.exec_cmd("nextcloud --background")
hl.exec_cmd("quickshell")
hl.exec_cmd("matugen")
hl.exec_cmd("wl-paste --type text --watch cliphist store")
end)
return function(is_laptop)
hl.env("QT_QPA_PLATFORM", "wayland")
hl.env("QT_QPA_PLATFORM_THEME", "qt6ct")
hl.on("hyprland.start", function()
-- Portal fixes
hl.exec_cmd("~/.config/hypr/xdg-portal-hyprland")
-- Environment setup
hl.exec_cmd(
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY"
)
hl.exec_cmd("systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
hl.exec_cmd("systemctl --user start hyprpolkitagent")
-- Start bar and utilities
hl.exec_cmd("hypridle")
hl.exec_cmd("nextcloud --background")
hl.exec_cmd("dms run")
hl.exec_cmd("wl-paste --watch cliphist store")
if is_laptop then
hl.exec_cmd("hyprctl setcursor oreo_spark_blue_cursors 36")
else
hl.exec_cmd("hyprctl setcursor oreo_spark_blue_cursors 24")
end
end)
end
+41 -42
View File
@@ -1,44 +1,43 @@
return function(is_laptop, is_docked)
if is_laptop then
hl.monitor({
output = "",
mode = "preferred",
position = "auto",
scale = 1,
})
if is_docked then
hl.monitor({
output = "eDP-1",
disabled = true,
})
else
hl.monitor({
output = "eDP-1",
mode = "2880x1800@240",
position = "0x0",
scale = 1.5,
})
end
elseif is_laptop and is_docked then
hl.monitor({
output = "DP-1",
mode = "1920x1080@144",
position = "0x0",
scale = 1,
})
else
hl.monitor({
output = "DP-1",
mode = "1920x1080@144",
position = "0x0",
scale = 1,
vrr = 2
})
hl.monitor({
output = "DP-2",
mode = "1920x1080@75",
position = "1920x0",
scale = 1,
})
end
if is_laptop then
hl.monitor({
output = "",
mode = "preferred",
position = "auto",
scale = 1,
})
if is_docked then
hl.monitor({
output = "eDP-1",
disabled = true,
})
hl.monitor({
output = "DP-1",
mode = "1920x1080@144",
position = "0x0",
scale = 1,
})
else
hl.monitor({
output = "eDP-1",
mode = "2880x1800@240",
position = "0x0",
scale = 1.5,
})
end
else
hl.monitor({
output = "DP-1",
mode = "1920x1080@144",
position = "0x0",
scale = 1,
vrr = 2,
})
hl.monitor({
output = "DP-2",
mode = "1920x1080@75",
position = "1920x0",
scale = 1,
})
end
end
@@ -23,12 +23,6 @@ hl.window_rule({
},
fullscreen = true,
})
hl.window_rule({
match = {
class = "wlogout",
},
fullscreen = true,
})
-- Termfilechooser
hl.window_rule({
@@ -0,0 +1,13 @@
hl.window_rule({
match = {
title = "Bitwarden|secret",
},
no_screen_share = true
})
hl.window_rule({
match = {
class = "nm-connection-editor|[aA]uthentication",
},
no_screen_share = true
})
+20 -20
View File
@@ -3,36 +3,36 @@
-- └ ┘
-- Games
hl.window_rule({
match = {
class = "steam_app",
},
tag = "+game",
match = {
class = "steam_app.*",
},
tag = "+game",
})
hl.window_rule({
match = {
title = "Minecraft|Beat Saber",
},
tag = "+game",
match = {
title = "Minecraft.*|Beat Saber",
},
tag = "+game",
})
-- Launchers
hl.window_rule({
match = {
class = "steam|minecraft-launcher|org\\.prismlauncher\\.PrismLauncher",
},
tag = "+launchers",
match = {
class = "steam|minecraft-launcher|org\\.prismlauncher\\.PrismLauncher",
},
tag = "+launchers",
})
-- Dialogs
hl.window_rule({
match = {
class = "file_progress|confirm|dialog|download|notification|error|splash|confirmreset|lxappearance|pavucontrol|file-roller",
},
tag = "+dialog",
match = {
class = "file_progress|confirm|dialog|download|notification|error|splash|confirmreset|lxappearance|pavucontrol|file-roller",
},
tag = "+dialog",
})
hl.window_rule({
match = {
class = "SteamVR Status|Open File|Media viewer|Volume Control|Picture-in-Picture|File Operation Progress|Loading|AG Controller|AG Controller|Qalculate",
},
tag = "+dialog",
match = {
title = ".*SteamVR.*|Open File.*|Media viewer|Volume Control|Picture-in-Picture|File Operation Progress|Loading.*|AG Controller|.*Qalculate.*",
},
tag = "+dialog",
})
+35 -16
View File
@@ -3,35 +3,54 @@
-- └ ┘
-- Workspace 1
hl.window_rule({
match = { tag = "game" },
workspace = 1,
match = { tag = "game" },
workspace = 1,
})
hl.window_rule({
match = { title = "ALVR|^hidden-terminator$" },
workspace = 1,
match = { title = "ALVR.*|^hidden-terminator$" },
workspace = 1,
})
-- Workspace 2
hl.window_rule({
match = { class = "evince|okular|org\\.pwmt\\.zathura|librewolf" },
workspace = 2,
match = { class = "evince|okular|org\\.pwmt\\.zathura" },
workspace = 2,
})
hl.window_rule({
match = { title = "BSManager" },
workspace = 2,
match = { title = ".*BSManager.*" },
workspace = 2,
})
-- Workspace 3
hl.window_rule({
match = { class = "minecraft-launcher" },
workspace = 3,
})
hl.window_rule({
match = { title = "[Ss]team" },
workspace = 3,
match = { tag = "launchers" },
workspace = 3,
})
-- Special
hl.window_rule({
match = { title = "Qalculate|AG Controller" },
workspace = "special",
match = { title = "Qalculate.*|AG Controller" },
workspace = "special:main",
})
-- Workspace 4
hl.window_rule({
match = { class = "brave-browser" },
workspace = 4,
})
hl.window_rule({
match = { title = ".*-summary.pdf|.*cheatsheet.pdf|.*cheat-sheet.pdf" },
workspace = 4,
})
-- Workspace 11
hl.window_rule({
match = { class = "librewolf" },
workspace = 11,
})
-- Workspace 10
hl.window_rule({
match = { class = "vesktop" },
workspace = 10,
})
+55 -20
View File
@@ -1,20 +1,55 @@
hl.workspace_rule({
workspace = "1",
monitor = "DP-1",
default = true,
})
hl.workspace_rule({
workspace = "2",
monitor = "DP-2",
default = true,
})
hl.workspace_rule({
workspace = "3",
monitor = "DP-1",
default = true,
})
hl.workspace_rule({
workspace = "4",
monitor = "DP-2",
default = true,
})
return function(is_laptop, is_docked)
hl.workspace_rule({
workspace = "1",
monitor = "DP-1",
default = true,
})
hl.workspace_rule({
workspace = "3",
monitor = "DP-1",
default = false,
})
if not is_laptop then
hl.workspace_rule({
workspace = "2",
monitor = "DP-2",
default = true,
})
hl.workspace_rule({
workspace = "4",
monitor = "DP-2",
default = false,
})
hl.workspace_rule({
workspace = "10",
monitor = "DP-2",
default = false,
})
hl.workspace_rule({
workspace = "11",
monitor = "DP-2",
default = false,
})
elseif is_docked then
hl.workspace_rule({
workspace = "2",
monitor = "HDMI-A-1",
default = true,
})
hl.workspace_rule({
workspace = "4",
monitor = "HDMI-A-1",
default = false,
})
hl.workspace_rule({
workspace = "10",
monitor = "HDMI-A-1",
default = false,
})
hl.workspace_rule({
workspace = "11",
monitor = "HDMI-A-1",
default = false,
})
end
end
+7 -6
View File
@@ -12,9 +12,10 @@
# ┌ ┐
# │ BACKGROUND │
# └ ┘
source = ./hyprlock-colors.conf
background {
monitor =
path = /home/janis/NextCloud/Wallpapers/nvim/nvim-simple.png # Or screenshot
path = $background_image # Or screenshot
blur_passes = 1
}
@@ -29,9 +30,9 @@ input-field {
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = false
outer_color = rgb(92, 155, 63)
inner_color = rgb(200, 200, 200)
font_color = rgb(10, 10, 10)
outer_color = $entry_border_color
inner_color = $entry_background_color
font_color = $entry_color
fade_on_empty = true
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
@@ -56,7 +57,7 @@ label {
label {
monitor =
text = $LAYOUT
color = rgba(200, 200, 200, 1.0)
color = $text_color
font_size = 12
font_family = Comfortaa
@@ -68,7 +69,7 @@ label {
label {
monitor =
text = $USER
color = rgba(200, 200, 200, 1.0)
color = $text_color
font_size = 12
font_family = Comfortaa
+2
View File
@@ -3,6 +3,8 @@
# │ Kitty Config │
# ╰────────────────────────────────────────────────╯
# ────────────────────────────────────────────────────────────────────
include dank-tabs.conf
include dank-theme.conf
# ┌ ┐
+5 -13
View File
@@ -1,26 +1,18 @@
[config]
version_check = false
[templates.m3colors]
input_path = '~/.config/matugen/templates/colors.json'
output_path = '~/.local/state/quickshell/user/generated/colors.json'
[templates.hyprland]
input_path = '~/.config/matugen/templates/hyprland/colors.lua'
output_path = '~/.config/hypr/hyprland/colors.lua'
[templates.hyprlock]
input_path = '~/.config/matugen/templates/hyprland/hyprlock-colors.conf'
output_path = '~/.config/hypr/hyprlock/colors.conf'
[templates.gtk3]
input_path = '~/.config/matugen/templates/gtk-3.0/gtk.css'
output_path = '~/.config/gtk-3.0/gtk.css'
[templates.gtk4]
input_path = '~/.config/matugen/templates/gtk-4.0/gtk.css'
output_path = '~/.config/gtk-4.0/gtk.css'
output_path = '~/.config/hypr/hyprlock-colors.conf'
[templates.wlogout]
input_path = '~/.config/matugen/templates/wlogout/style.css'
output_path = '~/.config/wlogout/style.css'
[templates.yazi]
input_path = '~/.config/matugen/templates/yazi/theme.toml'
output_path = '~/.config/yazi/theme.toml'
-51
View File
@@ -1,51 +0,0 @@
{
"background": "{{colors.background.default.hex}}",
"error": "{{colors.error.default.hex}}",
"error_container": "{{colors.error_container.default.hex}}",
"inverse_on_surface": "{{colors.inverse_on_surface.default.hex}}",
"inverse_primary": "{{colors.inverse_primary.default.hex}}",
"inverse_surface": "{{colors.inverse_surface.default.hex}}",
"on_background": "{{colors.on_background.default.hex}}",
"on_error": "{{colors.on_error.default.hex}}",
"on_error_container": "{{colors.on_error_container.default.hex}}",
"on_primary": "{{colors.on_primary.default.hex}}",
"on_primary_container": "{{colors.on_primary_container.default.hex}}",
"on_primary_fixed": "{{colors.on_primary_fixed.default.hex}}",
"on_primary_fixed_variant": "{{colors.on_primary_fixed_variant.default.hex}}",
"on_secondary": "{{colors.on_secondary.default.hex}}",
"on_secondary_container": "{{colors.on_secondary_container.default.hex}}",
"on_secondary_fixed": "{{colors.on_secondary_fixed.default.hex}}",
"on_secondary_fixed_variant": "{{colors.on_secondary_fixed_variant.default.hex}}",
"on_surface": "{{colors.on_surface.default.hex}}",
"on_surface_variant": "{{colors.on_surface_variant.default.hex}}",
"on_tertiary": "{{colors.on_tertiary.default.hex}}",
"on_tertiary_container": "{{colors.on_tertiary_container.default.hex}}",
"on_tertiary_fixed": "{{colors.on_tertiary_fixed.default.hex}}",
"on_tertiary_fixed_variant": "{{colors.on_tertiary_fixed_variant.default.hex}}",
"outline": "{{colors.outline.default.hex}}",
"outline_variant": "{{colors.outline_variant.default.hex}}",
"primary": "{{colors.primary.default.hex}}",
"primary_container": "{{colors.primary_container.default.hex}}",
"primary_fixed": "{{colors.primary_fixed.default.hex}}",
"primary_fixed_dim": "{{colors.primary_fixed_dim.default.hex}}",
"scrim": "{{colors.scrim.default.hex}}",
"secondary": "{{colors.secondary.default.hex}}",
"secondary_container": "{{colors.secondary_container.default.hex}}",
"secondary_fixed": "{{colors.secondary_fixed.default.hex}}",
"secondary_fixed_dim": "{{colors.secondary_fixed_dim.default.hex}}",
"shadow": "{{colors.shadow.default.hex}}",
"surface": "{{colors.surface.default.hex}}",
"surface_bright": "{{colors.surface_bright.default.hex}}",
"surface_container": "{{colors.surface_container.default.hex}}",
"surface_container_high": "{{colors.surface_container_high.default.hex}}",
"surface_container_highest": "{{colors.surface_container_highest.default.hex}}",
"surface_container_low": "{{colors.surface_container_low.default.hex}}",
"surface_container_lowest": "{{colors.surface_container_lowest.default.hex}}",
"surface_dim": "{{colors.surface_dim.default.hex}}",
"surface_tint": "{{colors.surface_tint.default.hex}}",
"surface_variant": "{{colors.surface_variant.default.hex}}",
"tertiary": "{{colors.tertiary.default.hex}}",
"tertiary_container": "{{colors.tertiary_container.default.hex}}",
"tertiary_fixed": "{{colors.tertiary_fixed.default.hex}}",
"tertiary_fixed_dim": "{{colors.tertiary_fixed_dim.default.hex}}"
}
-38
View File
@@ -1,38 +0,0 @@
/*
* GTK colors generated with Matugen
* The source template is here: ~/.config/matugen/templates/gtk-3.0/gtk.css
*/
/* Accents */
@define-color accent_color {{colors.primary.default.hex}};
@define-color accent_fg_color {{colors.on_primary.default.hex}};
@define-color accent_bg_color {{colors.primary.default.hex}};
@define-color destructive_bg_color {{colors.error_container.default.hex}};
@define-color destructive_fg_color {{colors.on_error_container.default.hex}};
@define-color destructive_color {{colors.error.default.hex}};
@define-color success_bg_color #374B3E;
@define-color success_fg_color #D1E9D6;
@define-color success_color #B5CCBA;
/* Base surfaces */
@define-color window_bg_color {{colors.background.default.hex}};
@define-color window_fg_color {{colors.on_background.default.hex}};
@define-color headerbar_bg_color {{colors.surface_container.default.hex}};
@define-color headerbar_backdrop_color {{colors.surface_container.default.hex}};
@define-color headerbar_fg_color {{colors.on_surface.default.hex}};
@define-color card_bg_color {{colors.surface_container.default.hex}};
@define-color card_fg_color {{colors.on_surface.default.hex}};
@define-color sidebar_bg_color {{colors.surface_container.default.hex}};
@define-color sidebar_fg_color {{colors.on_surface.default.hex}};
@define-color secondary_sidebar_bg_color {{colors.surface_container_low.default.hex}};
@define-color secondary_sidebar_fg_color {{colors.on_surface.default.hex}};
@define-color sidebar_border_color @sidebar_bg_color;
@define-color sidebar_backdrop_color @sidebar_bg_color;
@define-color view_bg_color {{colors.surface_container_lowest.default.hex}};
@define-color view_fg_color {{colors.on_surface.default.hex}};
@define-color overview_bg_color {{colors.surface_container_lowest.default.hex}};
@define-color overview_fg_color {{colors.on_surface.default.hex}};
/* Popups */
@define-color popover_bg_color {{colors.surface_container_highest.default.hex}};
@define-color popover_fg_color {{colors.on_surface.default.hex}};
@define-color dialog_bg_color {{colors.surface_container_high.default.hex}};
@define-color dialog_fg_color {{colors.on_surface.default.hex}};
-541
View File
@@ -1,541 +0,0 @@
/*
* GTK colors generated with Matugen
* The source template is here: ~/.config/matugen/templates/gtk-4.0/gtk.css
*/
@media (prefers-color-scheme: light) {
/* Accents */
@define-color accent_color {{colors.primary.light.hex}};
@define-color accent_hover_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.08);
@define-color accent_vibrant_hover_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.18);
@define-color accent_active_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.1);
@define-color accent_vibrant_active_color rgba({{colors.primary.light.red}}, {{colors.primary.light.green}}, {{colors.primary.light.blue}}, 0.26);
@define-color accent_fg_color {{colors.on_primary.light.hex}};
@define-color accent_bg_color {{colors.primary.light.hex}};
@define-color destructive_bg_color {{colors.error_container.light.hex}};
@define-color destructive_fg_color {{colors.on_error_container.light.hex}};
@define-color destructive_color {{colors.error.light.hex}};
@define-color success_bg_color #B5CCBA;
@define-color success_fg_color #213528;
@define-color success_color #374B3E;
/* Base surfaces */
@define-color window_bg_color {{colors.background.light.hex}};
@define-color window_fg_color {{colors.on_background.light.hex}};
@define-color headerbar_bg_color {{colors.surface_container.light.hex}};
@define-color headerbar_backdrop_color {{colors.surface_container.light.hex}};
@define-color headerbar_fg_color {{colors.on_surface.light.hex}};
@define-color card_bg_color {{colors.surface_container.light.hex}};
@define-color card_fg_color {{colors.on_surface.light.hex}};
@define-color sidebar_bg_color {{colors.background.light.hex}};
@define-color sidebar_fg_color {{colors.on_surface.light.hex}};
@define-color sidebar_row_active_bg_color {{colors.secondary_container.light.hex}};
@define-color sidebar_row_active_fg_color {{colors.on_secondary_container.light.hex}};
@define-color secondary_sidebar_bg_color {{colors.surface_container_low.light.hex}};
@define-color secondary_sidebar_backdrop_color {{colors.surface_container_low.light.hex}};
@define-color secondary_sidebar_fg_color {{colors.on_surface_variant.light.hex}};
@define-color sidebar_border_color @sidebar_bg_color;
@define-color sidebar_backdrop_color @sidebar_bg_color;
@define-color view_bg_color {{colors.surface_container_lowest.light.hex}};
@define-color view_fg_color {{colors.on_surface.light.hex}};
@define-color overview_bg_color {{colors.surface_container_lowest.light.hex}};
@define-color overview_fg_color {{colors.on_surface.light.hex}};
/* Popups */
@define-color popover_bg_color {{colors.surface_container_highest.light.hex}};
@define-color popover_fg_color {{colors.on_surface.light.hex}};
@define-color popover_fg_hover_color rgba({{colors.on_surface.light.red}}, {{colors.on_surface.light.green}}, {{colors.on_surface.light.blue}}, 0.08);
@define-color dialog_bg_color {{colors.surface_container_high.light.hex}};
@define-color dialog_fg_color {{colors.on_surface.light.hex}};
@define-color thumbnail_bg_color {{colors.surface_container_high.light.hex}};
@define-color thumbnail_fg_color {{colors.on_surface.light.hex}};
/* Material */
@define-color inverse_on_surface {{colors.inverse_on_surface.light.hex}};
@define-color inverse_primary {{colors.inverse_primary.light.hex}};
@define-color inverse_surface {{colors.inverse_surface.light.hex}};
@define-color surface_container_highest {{colors.surface_container_highest.light.hex}};
@define-color surface_container_high {{colors.surface_container_high.light.hex}};
@define-color on_surface_variant {{colors.on_surface_variant.light.hex}};
@define-color surface_variant {{colors.surface_variant.light.hex}};
@define-color outline {{colors.outline.light.hex}};
/* Material state layers */
@define-color inverse_on_surface_hover rgba({{colors.inverse_on_surface.light.red}}, {{colors.inverse_on_surface.light.green}}, {{colors.inverse_on_surface.light.blue}}, 0.08);
@define-color inverse_on_surface_active rgba({{colors.inverse_on_surface.light.red}}, {{colors.inverse_on_surface.light.green}}, {{colors.inverse_on_surface.light.blue}}, 0.18);
@define-color inverse_primary_hover rgba({{colors.inverse_primary.light.red}}, {{colors.inverse_primary.light.green}}, {{colors.inverse_primary.light.blue}}, 0.08);
@define-color inverse_primary_active rgba({{colors.inverse_primary.light.red}}, {{colors.inverse_primary.light.green}}, {{colors.inverse_primary.light.blue}}, 0.18);
}
@media (prefers-color-scheme: dark) {
/* Accents */
@define-color accent_color {{colors.primary.dark.hex}};
@define-color accent_hover_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.08);
@define-color accent_vibrant_hover_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.18);
@define-color accent_active_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.1);
@define-color accent_vibrant_active_color rgba({{colors.primary.dark.red}}, {{colors.primary.dark.green}}, {{colors.primary.dark.blue}}, 0.2);
@define-color accent_fg_color {{colors.on_primary.dark.hex}};
@define-color accent_bg_color {{colors.primary.dark.hex}};
@define-color destructive_bg_color {{colors.error_container.dark.hex}};
@define-color destructive_fg_color {{colors.on_error_container.dark.hex}};
@define-color destructive_color {{colors.error.dark.hex}};
@define-color success_bg_color #374B3E;
@define-color success_fg_color #D1E9D6;
@define-color success_color #B5CCBA;
/* Base surfaces */
@define-color window_bg_color {{colors.background.dark.hex}};
@define-color window_fg_color {{colors.on_background.dark.hex}};
@define-color headerbar_bg_color {{colors.surface_container.dark.hex}};
@define-color headerbar_backdrop_color {{colors.surface_container.dark.hex}};
@define-color headerbar_fg_color {{colors.on_surface.dark.hex}};
@define-color card_bg_color {{colors.surface_container.dark.hex}};
@define-color card_fg_color {{colors.on_surface.dark.hex}};
@define-color sidebar_bg_color {{colors.background.dark.hex}};
@define-color sidebar_fg_color {{colors.on_surface.dark.hex}};
@define-color sidebar_row_active_bg_color {{colors.secondary_container.dark.hex}};
@define-color sidebar_row_active_fg_color {{colors.on_secondary_container.dark.hex}};
@define-color secondary_sidebar_bg_color {{colors.surface_container_low.dark.hex}};
@define-color secondary_sidebar_backdrop_color {{colors.surface_container_low.dark.hex}};
@define-color secondary_sidebar_fg_color {{colors.on_surface_variant.dark.hex}};
@define-color sidebar_border_color @sidebar_bg_color;
@define-color sidebar_backdrop_color @sidebar_bg_color;
@define-color view_bg_color {{colors.surface_container_lowest.dark.hex}};
@define-color view_fg_color {{colors.on_surface.dark.hex}};
@define-color overview_bg_color {{colors.surface_container_lowest.dark.hex}};
@define-color overview_fg_color {{colors.on_surface.dark.hex}};
/* Popups */
@define-color popover_bg_color {{colors.surface_container_highest.dark.hex}};
@define-color popover_fg_color {{colors.on_surface.dark.hex}};
@define-color popover_fg_hover_color rgba({{colors.on_surface.dark.red}}, {{colors.on_surface.dark.green}}, {{colors.on_surface.dark.blue}}, 0.08);
@define-color dialog_bg_color {{colors.surface_container_high.dark.hex}};
@define-color dialog_fg_color {{colors.on_surface.dark.hex}};
@define-color thumbnail_bg_color {{colors.surface_container_high.dark.hex}};
@define-color thumbnail_fg_color {{colors.on_surface.dark.hex}};
/* Material */
@define-color inverse_on_surface {{colors.inverse_on_surface.dark.hex}};
@define-color inverse_primary {{colors.inverse_primary.dark.hex}};
@define-color inverse_surface {{colors.inverse_surface.dark.hex}};
@define-color surface_container_highest {{colors.surface_container_highest.dark.hex}};
@define-color surface_container_high {{colors.surface_container_high.dark.hex}};
@define-color on_surface_variant {{colors.on_surface_variant.dark.hex}};
@define-color surface_variant {{colors.surface_variant.dark.hex}};
@define-color outline {{colors.outline.dark.hex}};
/* Material state layers */
@define-color inverse_on_surface_hover rgba({{colors.inverse_on_surface.dark.red}}, {{colors.inverse_on_surface.dark.green}}, {{colors.inverse_on_surface.dark.blue}}, 0.08);
@define-color inverse_on_surface_active rgba({{colors.inverse_on_surface.dark.red}}, {{colors.inverse_on_surface.dark.green}}, {{colors.inverse_on_surface.dark.blue}}, 0.18);
@define-color inverse_primary_hover rgba({{colors.inverse_primary.dark.red}}, {{colors.inverse_primary.dark.green}}, {{colors.inverse_primary.dark.blue}}, 0.08);
@define-color inverse_primary_active rgba({{colors.inverse_primary.dark.red}}, {{colors.inverse_primary.dark.green}}, {{colors.inverse_primary.dark.blue}}, 0.18);
}
* {
caret-color: @accent_color;
}
window {
background: @window_bg_color;
}
.text-button {
border-radius: 999px;
}
.text-button,
.text-button * {
font-weight: 500;
}
splitbutton {
background-color: transparent;
}
splitbutton button {
border-top-left-radius: 999px;
border-bottom-left-radius: 999px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
splitbutton separator {
color: transparent;
}
splitbutton menubutton {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
border-top-right-radius: 999px;
border-bottom-right-radius: 999px;
}
.popup-menu-item {
background-color: transparent;
border-radius: 999px;
}
#NautilusPathBar #NautilusPathButton *,
.nautilus-pathbar .nautilus-path-button * {
color: @sidebar_row_active_fg_color;
font-weight: 400;
}
#NautilusPathBar #NautilusPathButton,
.nautilus-pathbar .nautilus-path-button {
background: @accent_active_color;
border-radius: 4px;
margin: 0;
margin-right: 2px;
}
#NautilusPathBar #NautilusPathButton:hover,
.nautilus-pathbar .nautilus-path-button:hover {
background: @accent_vibrant_hover_color;
}
#NautilusPathBar #NautilusPathButton:active,
.nautilus-pathbar .nautilus-path-button:active {
background: @accent_vibrant_active_color;
}
#NautilusPathButton,
.nautilus-pathbar {
background: transparent;
}
#NautilusPathBar box box:first-child #NautilusPathButton,
.nautilus-pathbar box box:first-child .nautilus-path-button {
border-radius: 24px 4px 4px 24px;
}
#NautilusPathBar box box:last-child #NautilusPathButton,
.nautilus-pathbar box box:last-child .nautilus-path-button {
border-radius: 4px 24px 24px 4px;
}
#NautilusPathBar #NautilusPathButton.current-dir.current-dir,
.nautilus-pathbar .nautilus-path-button.current-dir.current-dir {
border-radius: 999px;
}
#NautilusPathBar .dim-label,
.nautilus-pathbar .dim-label {
font-size: 0;
}
#NautilusPathBar button .dim-label,
.nautilus-pathbar button .dim-label {
font-size: 14px;
opacity: 100%;
}
#NautilusPathBar button,
.nautilus-pathbar button {
border-radius: 8px;
}
#NautilusPathBar button:checked,
.nautilus-pathbar button:checked {
background: @accent_vibrant_hover_color;
}
headerbar button {
border-radius: 999px;
}
headerbar >windowhandle box stack > box:nth-child(2) {
background: @accent_active_color;
border-radius: 8px;
}
.nautilus-list-view,
.nautilus-grid-view {
background: @secondary_sidebar_bg_color;
border-radius: 16px;
}
.navigation-sidebar row * {
color: @sidebar_fg_color;
font-weight: 500;
font-size: 13px;
}
.navigation-sidebar row {
border-radius: 999px;
padding: 2px;
}
.navigation-sidebar row:hover {
background: @accent_hover_color;
}
.navigation-sidebar row:active {
background: @accent_active_color;
}
.navigation-sidebar row:selected {
background: @sidebar_row_active_bg_color;
}
.navigation-sidebar row:selected * {
color: @sidebar_row_active_fg_color;
}
banner widget {
border-radius: 16px 0 0 16px;
margin-bottom: 8px;
background-color: @secondary_sidebar_bg_color;
}
.boxed-list {
box-shadow: none;
background-color: @window_bg_color;
}
.boxed-list row {
background: @card_bg_color;
border-radius: 4px;
border: none;
margin-bottom: 2px;
}
.boxed-list row.activatable:hover {
background-color: @thumbnail_bg_color;
}
.boxed-list row.activatable:active {
background-color: @popover_bg_color;
}
.horizontal>listview>row {
background-color: transparent;
}
.boxed-list row:insensitive {
background-color: @card_bg_color;
}
.text-button.toggle {
border-radius: 4px;
background-color: @surface_container_highest;
margin-left: 2px;
}
.text-button.toggle:hover {
background-color: @surface_variant;
}
.text-button.toggle:active {
background-color: @surface_container_highest;
}
.text-button.toggle * {
color: @on_surface_variant;
font-weight: 400;
}
.boxed-list row:first-child {
border-radius: 16px 16px 4px 4px;
}
.boxed-list row:last-child {
border-radius: 4px 4px 16px 16px;
margin-bottom: 0;
}
.text-button.toggle:first-child {
border-radius: 16px 4px 4px 16px;
}
.text-button.toggle:last-child {
border-radius: 4px 16px 16px 4px;
}
.boxed-list row:first-child:last-child,
.text-button.toggle:first-child:last-child {
border-radius: 16px;
}
.text-button.toggle:checked {
background-color: @accent_bg_color;
border-radius: 999px;
}
.text-button.toggle:checked * {
color: @accent_fg_color;
font-weight: 500;
}
button.back {
border-radius: 999px;
background-color: @accent_hover_color;
padding-left: 4px;
padding-right: 6px;
}
button.back * {
font-size: 12px;
}
button.back:hover {
background-color: @accent_hover_color;
}
button.back:active {
background-color: @accent_active_color;
}
/* switch */
switch {
background: @secondary_sidebar_bg_color;
border: @outline 2px solid;
padding: 0;
}
switch:checked {
background: @accent_color;
border-color: @accent_color;
}
switch slider {
background: @outline;
margin: 3px;
min-width: 0;
min-height: 0;
}
switch:checked slider {
background: @accent_fg_color;
outline: transparent 2px solid;
margin: 0px;
}
/* toast */
toast {
border-radius: 999px;
padding: 6px 6px 6px 10px;
background-color: @inverse_surface;
color: @inverse_on_surface;
}
toast .heading {
font-weight: 400;
}
toast button {
background-color: transparent;
color: @inverse_primary;
}
toast button:hover {
background-color: @inverse_primary_hover;
}
toast button:active {
background-color: @inverse_primary_active;
}
toast button:last-child {
color: @inverse_on_surface;
}
toast button:last-child:hover {
background-color: @inverse_on_surface_hover;
}
toast button:last-child:active {
background-color: @inverse_on_surface_active;
}
.collapse-spacing.vertical {
padding-bottom: 0;
}
tabbox {
padding: 0;
}
tabbox tabboxchild tab,
tabbox tabboxchild {
background: transparent;
padding: 0 8px 3px;
border-radius: 999px;
}
tabbox tabboxchild tab {
padding: 3px 8px;
}
tab:hover {
background: @accent_hover_color;
}
tab:active,
tab:selected {
background: @accent_active_color;
}
tab .tab-title {
padding: 0 12px;
color: @secondary_sidebar_fg_color;
}
tab .tab-title label {
border: none;
font-weight: 500;
}
tab:selected .tab-title label {
padding: 6px 0;
color: @accent_color;
}
/* popup menu */
popover listview.view row,
popover listview.view row:first-child,
popover listview.view row:last-child {
background: transparent;
border-radius: 8px;
}
popover contents,
popover arrow {
background: @secondary_sidebar_bg_color;
}
popover listview.view row:hover {
background: @popover_fg_hover_color;
}
popover listview.view row:active {
background: @popover_fg_active_color;
}
modelbutton {
padding: 2px 10px;
}
modelbutton * {
color: @popover_fg_color;
}
modelbutton:hover {
background-color: @popover_fg_hover_color;
}
tooltip {
background-color: @inverse_surface;
color: @inverse_on_surface;
font-size: 11px;
padding: 5px 9px;
}
/* search */
.entry-completion.entry-completion.entry-completion contents {
padding: 0;
}
.image-button.flat arrow {
background: transparent;
}
+32 -10
View File
@@ -1,24 +1,46 @@
hl.config({
general = {
col = {
active_border = "rgba({{colors.primary.default.hex_stripped}}cc) rgba({{colors.secondary.default.hex_stripped}}cc) rgba({{colors.tertiary.default.hex_stripped}}cc) 45deg",
active_border = {
colors = {
"rgba({{colors.primary.default.hex_stripped}}cc)",
"rgba({{colors.secondary.default.hex_stripped}}cc)",
"rgba({{colors.tertiary.default.hex_stripped}}cc)",
},
angle = 45,
},
inactive_border = "rgba({{colors.surface_container_low.default.hex_stripped}}33)",
},
},
group = {
col = {
active_border = "rgba({{colors.outline_variant.default.hex_stripped}}77)",
inactive_border = "rgba({{colors.surface_container_high.default.hex_stripped}}33)",
border_active = "rgba({{colors.secondary.default.hex_stripped}}cc)",
border_inactive = "rgba({{colors.surface_container_high.default.hex_stripped}}33)",
border_locked_active = "rgba({{colors.tertiary.default.hex_stripped}}cc)",
border_locked_inactive = "rgba({{colors.surface_container_high.default.hex_stripped}}33)",
},
groupbar = {
font_family = "Comfortaa",
height = 13,
font_size = 12,
text_color = "rgba({{colors.on_secondary.default.hex_stripped}}ff)",
text_color_inactive = "rgba({{colors.on_surface.default.hex_stripped}}ff)",
text_color_locked_active = "rgba({{colors.on_error.default.hex_stripped}}ff)",
text_color_locked_inactive = "rgba({{colors.on_surface.default.hex_stripped}}ff)",
indicator_gap = 0,
indicator_height = 3,
rounding = 3,
col = {
active = "rgba({{colors.secondary.default.hex_stripped}}ff)",
inactive = "rgba({{colors.surface_container_low.default.hex_stripped}}aa)",
locked_inactive = "rgba({{colors.surface_container_high.default.hex_stripped}}ff)",
locked_active = "rgba({{colors.error.default.hex_stripped}}aa)",
},
},
},
decoration = {
shadow = {
color = "rgba({{colors.shadow.default.hex_stripped}}20)",
}
}
})
hl.window_rule({
match = { pin = 1 },
border_color = "rgba({{colors.primary.default.hex_stripped}}AA) rgba({{colors.primary.default.hex_stripped}}77)",
},
},
})
@@ -0,0 +1,10 @@
# This configuration is generated by matugen
# Changing these variables with matugen still enabled will overwrite them.
background = rgba({{colors.background.default.hex_stripped}}FF)
base = rgba({{colors.surface.default.hex_stripped}}FF)
text = rgba({{colors.on_background.default.hex_stripped}}FF)
accent = rgba({{colors.primary.default.hex_stripped}}FF)
accent_secondary = rgba({{colors.secondary.default.hex_stripped}}FF)
font_family = Comfortaa
font_family_monospace = Source Code Pro
+3 -2
View File
@@ -7,7 +7,7 @@ window {
font-family: monospace;
font-size: 14pt;
color: {{colors.on_background.default.hex}}; /* text */
background-color: {{colors.primary.background.hex}}60;
background-color: rgba({{colors.background.default.red}}, {{colors.background.default.green}}, {{colors.background.default.blue}}, 0.3);
}
button {
@@ -23,10 +23,11 @@ button {
button:hover {
background-color: {{colors.primary.default.hex}};
color: {{colors.on_primary.default.hex}};
}
button:focus {
background-color: {{colors.primary.default.hex}}80;
background-color: rgba({{colors.primary.default.red}}, {{colors.primary.default.green}}, {{colors.primary.default.blue}}, 0.8);
color: {{colors.on_primary.default.hex}};
}
+70
View File
@@ -0,0 +1,70 @@
[app]
overall = {
bg = "{{ colors.background.default.hex }}"
}
[mgr]
cwd = {
bg = "{{ colors.background.default.hex }}",
fg = "{{ colors.tertiary.default.hex }}"
}
find_keyword = {
bg = "{{ colors.secondary.default.hex }}",
fg = "{{ colors.on_secondary.default.hex }}"
}
find_position = {
bg = "{{ colors.secondary.default.hex }}",
fg = "{{ colors.on_secondary.default.hex }}"
}
symlink_target = {
bg = "{{ colors.background.default.hex }}",
fg = "{{ colors.primary.default.hex }}"
}
border_style = {
bg = "{{ colors.background.default.hex }}",
fg = "{{ colors.tertiary.default.hex }}"
}
[indicator]
parent = {
bg = "{{ colors.primary.default.hex }}",
fg = "{{ colors.on_primary.default.hex }}"
}
current = {
bg = "{{ colors.primary.default.hex }}",
fg = "{{ colors.on_primary.default.hex }}"
}
preview = {
bg = "{{ colors.background.default.hex }}",
fg = "{{ colors.primary.default.hex }}",
underline = true
}
[tabs]
active = {
bg = "{{ colors.secondary.default.hex }}",
fg = "{{ colors.on_secondary.default.hex }}"
}
inactive = {
bg = "{{ colors.surface.default.hex }}",
fg = "{{ colors.on_surface.default.hex }}"
}
[which]
mask = {
bg = "{{ colors.surface_variant.default.hex }}",
fg = "{{ colors.on_surface_variant.default.hex }}"
}
cand = {
bg = "{{ colors.surface_variant.default.hex }}",
fg = "{{ colors.primary.default.hex }}",
}
rest = {
bg = "{{ colors.surface_variant.default.hex }}",
fg = "{{ colors.on_surface_variant.default.hex }}",
}
desc = {
bg = "{{ colors.surface_variant.default.hex }}",
fg = "{{ colors.on_surface_variant.default.hex }}",
}
-4
View File
@@ -1,4 +0,0 @@
# Quickshell Status bar
Many of the components were taken and adapted from the [End-4 configs](https://github.com/end-4/dots-hyprland).
All of the files in `utils/` are taken from the End-4 configs
-35
View File
@@ -1,35 +0,0 @@
import Quickshell
import QtQuick
import QtQuick.Layouts
import "./widgets/"
import "../config"
Scope {
Variants {
model: Quickshell.screens
PanelWindow {
id: barRoot
property var modelData
screen: modelData
anchors {
top: true
left: true
right: true
}
color: Appearance.colors.m3background
implicitHeight: 40
RowLayout {
anchors.fill: parent
spacing: 0
Clock {}
}
}
}
}
-63
View File
@@ -1,63 +0,0 @@
import QtQuick
import QtQuick.Layouts
import "../config/"
// Mostly from here: https://github.com/ChrisTitusTech/quickshell/blob/main/bar/BarBlock.qml
Rectangle {
id: root
radius: Appearance.rounding.barItems
Layout.preferredWidth: contentContainer.implicitWidth + 20
Layout.preferredHeight: 30
property Item content: Text {
text: "No content"
}
property bool hoverEnabled: false
property Item mouseArea: mouseArea
property bool dim: false
property var onClicked: function () {}
property int leftPadding
property int rightPadding
// Background color
color: {
if (mouseArea.containsMouse)
return Appearance.colors.m3primary;
return Appearance.colors.m3background;
}
states: [
State {
when: mouseArea.containsMouse
PropertyChanges {
target: root
}
}
]
Behavior on color {
ColorAnimation {
duration: 200
}
}
Item {
// Contents of the bar block
id: contentContainer
implicitWidth: content.implicitWidth
implicitHeight: content.implicitHeight
anchors.centerIn: parent
children: content
}
MouseArea {
enabled: root.hoverEnabled
id: mouseArea
anchors.fill: root
hoverEnabled: true
acceptedButtons: Qt.LeftButton
onClicked: root.onClicked()
}
}
-2
View File
@@ -1,2 +0,0 @@
Bar 1.0 Bar.qml
WidgetWrapper 1.0 WidgetWrapper.qml
@@ -1,4 +0,0 @@
import QtQuick
import Quickshell
Scope {}
-10
View File
@@ -1,10 +0,0 @@
import QtQuick
import QtQuick.Layouts
import "."
import "../../config"
Text {
text: `${ClockHandler.date}, ${ClockHandler.time}`
color: Appearance.colors.m3onBackground
Layout.leftMargin: 10
}
@@ -1,30 +0,0 @@
pragma Singleton
import Quickshell
import Quickshell.Io
import QtQuick
Singleton {
property string time
property string date
Process {
id: dateProc
command: ["date", "+%a %e %b|%T"]
running: true
stdout: SplitParser {
onRead: data => {
date = data.split("|")[0];
time = data.split("|")[1];
}
}
}
Timer {
interval: 1000
running: true
repeat: true
onTriggered: dateProc.running = true
}
}
-6
View File
@@ -1,6 +0,0 @@
import Quickshell
import QtQuick
Scope {
id: root
}
-2
View File
@@ -1,2 +0,0 @@
Clock 1.0 Clock.qml
singleton ClockHandler 1.0 ClockHandler.qml
-114
View File
@@ -1,114 +0,0 @@
pragma Singleton
import QtQuick
import Quickshell
import Quickshell.Io
Singleton {
id: root
property QtObject colors
property QtObject fonts
property QtObject fontsizes
property QtObject rounding
// From end-4 configs
colors: QtObject {
property color m3background: "#141313"
property color m3onBackground: "#e6e1e1"
property color m3surface: "#141313"
property color m3surfaceDim: "#141313"
property color m3surfaceBright: "#3a3939"
property color m3surfaceContainerLowest: "#0f0e0e"
property color m3surfaceContainerLow: "#1c1b1c"
property color m3surfaceContainer: "#201f20"
property color m3surfaceContainerHigh: "#2b2a2a"
property color m3surfaceContainerHighest: "#363435"
property color m3onSurface: "#e6e1e1"
property color m3surfaceVariant: "#49464a"
property color m3onSurfaceVariant: "#cbc5ca"
property color m3inverseSurface: "#e6e1e1"
property color m3inverseOnSurface: "#313030"
property color m3outline: "#948f94"
property color m3outlineVariant: "#49464a"
property color m3shadow: "#000000"
property color m3scrim: "#000000"
property color m3surfaceTint: "#cbc4cb"
property color m3primary: "#cbc4cb"
property color m3onPrimary: "#322f34"
property color m3primaryContainer: "#2d2a2f"
property color m3onPrimaryContainer: "#bcb6bc"
property color m3inversePrimary: "#615d63"
property color m3secondary: "#cac5c8"
property color m3onSecondary: "#323032"
property color m3secondaryContainer: "#4d4b4d"
property color m3onSecondaryContainer: "#ece6e9"
property color m3tertiary: "#d1c3c6"
property color m3onTertiary: "#372e30"
property color m3tertiaryContainer: "#31292b"
property color m3onTertiaryContainer: "#c1b4b7"
property color m3error: "#ffb4ab"
property color m3onError: "#690005"
property color m3errorContainer: "#93000a"
property color m3onErrorContainer: "#ffdad6"
property color m3primaryFixed: "#e7e0e7"
property color m3primaryFixedDim: "#cbc4cb"
property color m3onPrimaryFixed: "#1d1b1f"
property color m3onPrimaryFixedVariant: "#49454b"
property color m3secondaryFixed: "#e6e1e4"
property color m3secondaryFixedDim: "#cac5c8"
property color m3onSecondaryFixed: "#1d1b1d"
property color m3onSecondaryFixedVariant: "#484648"
property color m3tertiaryFixed: "#eddfe1"
property color m3tertiaryFixedDim: "#d1c3c6"
property color m3onTertiaryFixed: "#211a1c"
property color m3onTertiaryFixedVariant: "#4e4447"
property color m3success: "#B5CCBA"
property color m3onSuccess: "#213528"
property color m3successContainer: "#374B3E"
property color m3onSuccessContainer: "#D1E9D6"
}
rounding: QtObject {
property int barItems: 10
}
function reapplyTheme() {
themeFileView.reload();
}
function applyTheme(fileContent) {
const json = JSON.parse(fileContent);
for (const key in json) {
if (json.hasOwnProperty(key)) {
// Convert snake_case to CamelCase
const camelCaseKey = key.replace(/_([a-z])/g, g => g[1].toUpperCase());
const m3Key = `${camelCaseKey}`;
root.colors[m3Key] = json[key];
}
}
}
Timer {
id: delayedFileRead
interval: 1000
repeat: false
running: false
onTriggered: {
root.applyTheme(themeFileView.text());
}
}
FileView {
id: themeFileView
path: Qt.resolvedUrl(Paths.materialColorsPath)
watchChanges: true
onFileChanged: {
this.reload();
delayedFileRead.start();
}
onLoadedChanged: {
const fileContent = themeFileView.text();
root.applyTheme(fileContent);
}
}
}
-14
View File
@@ -1,14 +0,0 @@
pragma Singleton
import Quickshell
import QtCore
import "../utils/"
Singleton {
readonly property string home: StandardPaths.standardLocations(StandardPaths.HomeLocation)[0]
readonly property string config: StandardPaths.standardLocations(StandardPaths.ConfigLocation)[0]
readonly property string state: StandardPaths.standardLocations(StandardPaths.StateLocation)[0]
readonly property string cache: StandardPaths.standardLocations(StandardPaths.CacheLocation)[0]
property string materialColorsPath: FileUtils.trimFileProtocol(`${Paths.state}/user/generated/colors.json`)
}
-2
View File
@@ -1,2 +0,0 @@
singleton Appearance 1.0 Appearance.qml
singleton Paths 1.0 Paths.qml
-95
View File
@@ -1,95 +0,0 @@
// From https://github.com/quickshell-mirror/quickshell-examples/blob/master/volume-osd/shell.qml
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Services.Pipewire
import Quickshell.Widgets
import "../config/"
Scope {
id: root
// Bind the pipewire node so its volume will be tracked
PwObjectTracker {
objects: [Pipewire.defaultAudioSink]
}
Connections {
target: Pipewire.defaultAudioSink?.audio
function onVolumeChanged() {
root.shouldShowOsd = true;
hideTimer.restart();
}
}
property bool shouldShowOsd: false
Timer {
id: hideTimer
interval: 1000
onTriggered: root.shouldShowOsd = false
}
// The OSD window will be created and destroyed based on shouldShowOsd.
// PanelWindow.visible could be set instead of using a loader, but using
// a loader will reduce the memory overhead when the window isn't open.
LazyLoader {
active: root.shouldShowOsd
PanelWindow {
// Since the panel's screen is unset, it will be picked by the compositor
// when the window is created. Most compositors pick the current active monitor.
anchors.bottom: true
margins.bottom: screen.height / 5
exclusiveZone: 0
implicitWidth: 300
implicitHeight: 50
color: "transparent"
// An empty click mask prevents the window from blocking mouse events.
mask: Region {}
Rectangle {
anchors.fill: parent
radius: height / 2
color: Appearance.colors.m3background
RowLayout {
anchors {
fill: parent
leftMargin: 10
rightMargin: 15
}
IconImage {
implicitSize: 30
source: Quickshell.iconPath("audio-volume-high-symbolic")
}
Rectangle {
// Stretches to fill all left-over space
Layout.fillWidth: true
implicitHeight: 10
radius: 20
color: "#50ffffff"
Rectangle {
anchors {
left: parent.left
top: parent.top
bottom: parent.bottom
}
implicitWidth: parent.width * (Pipewire.defaultAudioSink?.audio.volume ?? 0)
radius: parent.radius
}
}
}
}
}
}
}
-1
View File
@@ -1 +0,0 @@
Volume 1.0 Volume.qml
-15
View File
@@ -1,15 +0,0 @@
import Quickshell
import QtQuick
import "config"
import "bar"
import "osd"
ShellRoot {
Component.onCompleted: {
// Load themes
Appearance.reapplyTheme();
}
Bar {}
Volume {}
}
-72
View File
@@ -1,72 +0,0 @@
pragma Singleton
import Quickshell
Singleton {
id: root
/**
* Trims the File protocol off the input string
* @param {string} str
* @returns {string}
*/
function trimFileProtocol(str) {
let s = str;
if (typeof s !== "string") s = str.toString(); // Convert to string if it's an url or whatever
return s.startsWith("file://") ? s.slice(7) : s;
}
/**
* Extracts the file name from a file path
* @param {string} str
* @returns {string}
*/
function fileNameForPath(str) {
if (typeof str !== "string") return "";
const trimmed = trimFileProtocol(str);
return trimmed.split(/[\\/]/).pop();
}
/**
* Extracts the folder name from a directory path
* @param {string} str
* @returns {string}
*/
function folderNameForPath(str) {
if (typeof str !== "string") return "";
const trimmed = trimFileProtocol(str);
// Remove trailing slash if present
const noTrailing = trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
if (!noTrailing) return "";
return noTrailing.split(/[\\/]/).pop();
}
/**
* Removes the file extension from a file path or name
* @param {string} str
* @returns {string}
*/
function trimFileExt(str) {
if (typeof str !== "string") return "";
const trimmed = trimFileProtocol(str);
const lastDot = trimmed.lastIndexOf(".");
if (lastDot > -1 && lastDot > trimmed.lastIndexOf("/")) {
return trimmed.slice(0, lastDot);
}
return trimmed;
}
/**
* Returns the parent directory of a given file path
* @param {string} str
* @returns {string}
*/
function parentDirectory(str) {
if (typeof str !== "string") return "";
const trimmed = trimFileProtocol(str);
const parts = trimmed.split(/[\\/]/);
if (parts.length <= 1) return "";
parts.pop();
return parts.join("/");
}
}
Whitespace-only changes.
-1
View File
@@ -1 +0,0 @@
singleton FileUtils 1.0 FileUtils.qml
-87
View File
@@ -1,87 +0,0 @@
{
"$schema": "/etc/xdg/swaync/configSchema.json",
"ignore-gtk-theme": true,
"positionX": "right",
"positionY": "top",
"layer": "overlay",
"control-center-layer": "top",
"layer-shell": true,
"layer-shell-cover-screen": true,
"cssPriority": "user",
"control-center-margin-top": 0,
"control-center-margin-bottom": 0,
"control-center-margin-right": 0,
"control-center-margin-left": 0,
"notification-2fa-action": true,
"notification-inline-replies": false,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 10,
"timeout-low": 5,
"timeout-critical": 0,
"fit-to-screen": true,
"relative-timestamps": true,
"control-center-width": 500,
"control-center-height": 600,
"notification-window-width": 500,
"keyboard-shortcuts": true,
"notification-grouping": true,
"image-visibility": "when-available",
"transition-time": 200,
"hide-on-clear": false,
"hide-on-action": true,
"text-empty": "No Notifications",
"notification-visibility": {
"example-name": {
"state": "muted",
"urgency": "Normal",
"app-name": "example.app.id"
}
},
"widgets": [
"inhibitors",
"title",
"dnd",
"notifications"
],
"widget-config": {
"notifications": {
"vexpand": true
},
"inhibitors": {
"text": "Inhibitors",
"button-text": "Clear All",
"clear-all-button": true
},
"title": {
"text": "Notifications",
"clear-all-button": true,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 5,
"text": "Label Text"
},
"mpris": {
"blacklist": [],
"autohide": false,
"show-album-art": "always",
"loop-carousel": false
},
"buttons-grid": {
"buttons-per-row": 7,
"actions": [
{
"label": "直",
"type": "toggle",
"active": true,
"command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'",
"update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'"
}
]
}
}
}
+66
View File
@@ -0,0 +1,66 @@
/*
* ╭───────────────────────────────────────────────╮
* │ WLOGOUT │
* ╰───────────────────────────────────────────────╯
*/
window {
font-family: monospace;
font-size: 14pt;
color: #ffffff; /* text */
background-color: rgba(20, 20, 20, 0.5);
}
button {
background-repeat: no-repeat;
background-position: center;
background-size: 25%;
border: none;
background-color: transparent;
margin: 5px;
transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out;
border-radius: 40px;
}
button:hover {
background-color: rgba(22, 116, 185, 0.5);
}
button:focus {
background-color: rgb(22, 116, 185);
color: rgb(230, 230, 230);
}
#lock {
background-image: image(url("./lock.png"));
}
#lock:focus {
background-image: image(url("./lock-hover.png"));
}
#logout {
background-image: image(url("./logout.png"));
}
#logout:focus {
background-image: image(url("./logout-hover.png"));
}
#suspend {
background-image: image(url("./sleep.png"));
}
#suspend:focus {
background-image: image(url("./sleep-hover.png"));
}
#shutdown {
background-image: image(url("./power.png"));
}
#shutdown:focus {
background-image: image(url("./power-hover.png"));
}
#reboot {
background-image: image(url("./restart.png"));
}
#reboot:focus {
background-image: image(url("./restart-hover.png"));
}
File renamed without changes.
+81
View File
@@ -0,0 +1,81 @@
{
"hyprlandSubmapIndicator": {
"enabled": true,
"submapLabels": [
{
"submap": "device",
"label": "dev",
"color": "#FF0000"
},
{
"submap": "groups",
"label": "GRP",
"color": "#AABBCC"
}
],
"defaultTextColor": {
"r": 0.12941177189350128,
"g": 0.12941177189350128,
"b": 0.12941177189350128,
"a": 1,
"hsvHue": -1,
"hsvSaturation": 0,
"hsvValue": 0.12941177189350128,
"hslHue": -1,
"hslSaturation": 0,
"hslLightness": 0.12941177189350128,
"valid": true
},
"defaultIconName": "home",
"defaultIconColor": {},
"submapIcons": [
{
"submap": "device",
"icon": "build",
"color": "#FF0000"
},
{
"submap": "groups",
"icon": "group",
"color": "#AABBCC"
},
{
"submap": "launch",
"icon": "rocket_launch",
"color": "#00B51E"
},
{
"submap": "notifications",
"icon": "notification_settings",
"color": "#eec100"
},
{
"submap": "screenshot",
"icon": "screenshot_monitor",
"color": "#ad00ee"
},
{
"submap": "window",
"icon": "select_window",
"color": "#00b2ee"
},
{
"submap": "workspace",
"icon": "monitor",
"color": "#2800ee"
},
{
"submap": "groupedlaunch",
"icon": "open_in_new",
"color": "#005207"
}
],
"fontSize": "none"
},
"calculator": {
"enabled": true,
"trigger": "=",
"calcEngine": "qalc",
"noTrigger": false
}
}
+792
View File
@@ -0,0 +1,792 @@
{
"currentThemeName": "dynamic",
"currentThemeCategory": "dynamic",
"customThemeFile": "",
"registryThemeVariants": {},
"matugenScheme": "scheme-tonal-spot",
"matugenContrast": 0,
"runUserMatugenTemplates": true,
"matugenTargetMonitor": "",
"popupTransparency": 1,
"dockTransparency": 1,
"widgetBackgroundColor": "sch",
"widgetBackgroundCustomColor": "#6750A4",
"widgetBackgroundCustomStrength": 0.5,
"widgetColorMode": "colorful",
"controlCenterTileColorMode": "primary",
"buttonColorMode": "primary",
"cornerRadius": 12,
"niriLayoutGapsOverride": -1,
"niriLayoutRadiusOverride": -1,
"niriLayoutBorderSize": -1,
"hyprlandLayoutGapsOverride": -1,
"hyprlandLayoutGapsOutOverride": -1,
"hyprlandLayoutRadiusOverride": -1,
"hyprlandLayoutBorderSize": -1,
"hyprlandResizeOnBorder": false,
"mangoLayoutGapsOverride": -1,
"mangoLayoutGapsOutOverride": -1,
"mangoLayoutRadiusOverride": -1,
"mangoLayoutBorderSize": -1,
"mangoTrackpadNaturalScrolling": true,
"firstDayOfWeek": -1,
"showWeekNumber": false,
"calendarBackend": "auto",
"clockFormat": "24h",
"showSeconds": true,
"padHours12Hour": false,
"useFahrenheit": false,
"windSpeedUnit": "kmh",
"nightModeEnabled": false,
"animationSpeed": 4,
"customAnimationDuration": 150,
"syncComponentAnimationSpeeds": true,
"popoutAnimationSpeed": 1,
"popoutCustomAnimationDuration": 150,
"modalAnimationSpeed": 1,
"modalCustomAnimationDuration": 150,
"enableRippleEffects": true,
"animationVariant": 0,
"motionEffect": 0,
"m3ElevationEnabled": true,
"m3ElevationIntensity": 12,
"m3ElevationOpacity": 30,
"m3ElevationColorMode": "default",
"m3ElevationLightDirection": "top",
"m3ElevationCustomColor": "#000000",
"modalElevationEnabled": true,
"popoutElevationEnabled": true,
"barElevationEnabled": false,
"blurEnabled": false,
"blurForegroundLayers": true,
"blurLayerOutlineOpacity": 0.12,
"blurBorderEnabled": true,
"blurBorderColor": "outline",
"blurBorderCustomColor": "#ffffff",
"blurBorderOpacity": 0.35,
"wallpaperFillMode": "Fill",
"blurredWallpaperLayer": false,
"blurWallpaperOnOverview": false,
"wallpaperBackgroundColorMode": "black",
"wallpaperBackgroundCustomColor": "#000000",
"showLauncherButton": true,
"showWorkspaceSwitcher": true,
"showFocusedWindow": true,
"showWeather": true,
"showMusic": true,
"showClipboard": true,
"showCpuUsage": true,
"showMemUsage": true,
"showCpuTemp": true,
"showGpuTemp": true,
"selectedGpuIndex": 0,
"enabledGpuPciIds": [],
"showSystemTray": true,
"systemTrayIconTintMode": "primary",
"systemTrayIconTintSaturation": 0,
"systemTrayIconTintStrength": 100,
"showClock": true,
"showNotificationButton": true,
"showBattery": true,
"showBatteryPercent": true,
"showBatteryPercentOnlyOnBattery": false,
"showBatteryTime": false,
"showBatteryTimeOnlyOnBattery": false,
"batteryPillStyle": false,
"batteryPillPercentSign": false,
"showControlCenterButton": true,
"showCapsLockIndicator": true,
"controlCenterShowNetworkIcon": true,
"controlCenterShowBluetoothIcon": true,
"controlCenterShowAudioIcon": true,
"controlCenterShowAudioPercent": false,
"controlCenterShowVpnIcon": true,
"controlCenterShowBrightnessIcon": false,
"controlCenterShowBrightnessPercent": false,
"controlCenterShowMicIcon": false,
"controlCenterShowMicPercent": true,
"controlCenterShowBatteryIcon": false,
"controlCenterShowPrinterIcon": false,
"controlCenterShowScreenSharingIcon": true,
"controlCenterShowIdleInhibitorIcon": false,
"controlCenterShowDoNotDisturbIcon": false,
"showPrivacyButton": true,
"privacyShowMicIcon": false,
"privacyShowCameraIcon": false,
"privacyShowScreenShareIcon": false,
"controlCenterWidgets": [
{
"id": "volumeSlider",
"enabled": true,
"width": 50
},
{
"id": "inputVolumeSlider",
"enabled": true,
"width": 50
},
{
"id": "brightnessSlider",
"enabled": true,
"width": 100,
"instanceId": "mqkkrmb3egxs1ld56tbk0v52ce4yj5",
"deviceName": ""
},
{
"id": "bluetooth",
"enabled": true,
"width": 50
},
{
"id": "battery",
"enabled": true,
"width": 50
},
{
"id": "builtin_vpn",
"enabled": true,
"width": 50
},
{
"id": "wifi",
"enabled": true,
"width": 50
},
{
"id": "audioInput",
"enabled": true,
"width": 50
},
{
"id": "audioOutput",
"enabled": true,
"width": 50
}
],
"showWorkspaceIndex": true,
"showWorkspaceName": false,
"showWorkspacePadding": false,
"workspaceScrolling": false,
"showWorkspaceApps": false,
"workspaceDragReorder": true,
"maxWorkspaceIcons": 2,
"workspaceAppIconSizeOffset": 0,
"groupWorkspaceApps": true,
"groupActiveWorkspaceApps": false,
"workspaceFollowFocus": true,
"showOccupiedWorkspacesOnly": false,
"reverseScrolling": false,
"dwlShowAllTags": false,
"workspaceActiveAppHighlightEnabled": false,
"workspaceColorMode": "default",
"workspaceFocusedCustomColor": "#6750A4",
"workspaceOccupiedColorMode": "none",
"workspaceOccupiedCustomColor": "#625B71",
"workspaceUnfocusedColorMode": "default",
"workspaceUnfocusedCustomColor": "#49454E",
"workspaceUrgentColorMode": "default",
"workspaceUrgentCustomColor": "#B3261E",
"workspaceFocusedBorderEnabled": false,
"workspaceFocusedBorderColor": "primary",
"workspaceFocusedBorderCustomColor": "#6750A4",
"workspaceFocusedBorderThickness": 2,
"workspaceUnfocusedMonitorSeparateAppearance": false,
"workspaceUnfocusedMonitorColorMode": "default",
"workspaceUnfocusedMonitorFocusedCustomColor": "#6750A4",
"workspaceUnfocusedMonitorOccupiedColorMode": "none",
"workspaceUnfocusedMonitorOccupiedCustomColor": "#625B71",
"workspaceUnfocusedMonitorUnfocusedColorMode": "default",
"workspaceUnfocusedMonitorUnfocusedCustomColor": "#49454E",
"workspaceUnfocusedMonitorUrgentColorMode": "default",
"workspaceUnfocusedMonitorUrgentCustomColor": "#B3261E",
"workspaceUnfocusedMonitorBorderEnabled": false,
"workspaceUnfocusedMonitorBorderColor": "primary",
"workspaceUnfocusedMonitorBorderCustomColor": "#6750A4",
"workspaceUnfocusedMonitorBorderThickness": 2,
"workspaceNameIcons": {},
"waveProgressEnabled": true,
"scrollTitleEnabled": true,
"mediaAdaptiveWidthEnabled": true,
"audioVisualizerEnabled": true,
"mediaUseAlbumArtAccent": false,
"audioScrollMode": "volume",
"audioWheelScrollAmount": 5,
"audioDeviceScrollVolumeEnabled": false,
"mediaExcludePlayers": [],
"clockCompactMode": false,
"focusedWindowCompactMode": false,
"focusedWindowSize": 1,
"focusedWindowShowIcon": true,
"runningAppsCompactMode": true,
"barMaxVisibleApps": 0,
"barMaxVisibleRunningApps": 0,
"barShowOverflowBadge": true,
"trayAutoOverflow": true,
"trayPopupSingleLine": true,
"trayMaxVisibleItems": 0,
"appsDockHideIndicators": false,
"appsDockColorizeActive": false,
"appsDockActiveColorMode": "primary",
"appsDockEnlargeOnHover": false,
"appsDockEnlargePercentage": 125,
"appsDockIconSizePercentage": 100,
"keyboardLayoutNameCompactMode": false,
"keyboardLayoutNameShowIcon": false,
"runningAppsCurrentWorkspace": true,
"runningAppsGroupByApp": false,
"runningAppsCurrentMonitor": false,
"appIdSubstitutions": [],
"centeringMode": "index",
"clockDateFormat": "",
"lockDateFormat": "",
"greeterRememberLastSession": true,
"greeterRememberLastUser": true,
"greeterAutoLogin": false,
"greeterEnableFprint": false,
"greeterEnableU2f": false,
"greeterWallpaperPath": "",
"greeterLockDateFormat": "",
"greeterFontFamily": "",
"greeterWallpaperFillMode": "",
"greeterPamExternallyManaged": false,
"greeterSyncPending": false,
"greeterSyncBaseline": {},
"mediaSize": 1,
"appLauncherViewMode": "list",
"spotlightModalViewMode": "list",
"browserPickerViewMode": "grid",
"browserUsageHistory": {},
"appPickerViewMode": "grid",
"filePickerUsageHistory": {},
"sortAppsAlphabetically": false,
"appLauncherGridColumns": 4,
"spotlightCloseNiriOverview": true,
"rememberLastQuery": false,
"rememberLastMode": true,
"spotlightSectionViewModes": {
"apps": "list"
},
"appDrawerSectionViewModes": {},
"niriOverviewOverlayEnabled": true,
"niriOverviewLauncherStyle": "full",
"dankLauncherV2Size": "compact",
"dankLauncherV2ShowSourceBadges": true,
"dankLauncherV2BorderEnabled": false,
"dankLauncherV2BorderThickness": 2,
"dankLauncherV2BorderColor": "primary",
"dankLauncherV2ShowFooter": true,
"dankLauncherV2UnloadOnClose": false,
"dankLauncherV2IncludeFilesInAll": false,
"dankLauncherV2IncludeFoldersInAll": false,
"launcherUseOverlayLayer": false,
"launcherStyle": "full",
"spotlightBarShowModeChips": false,
"keybindsFloatingWindow": false,
"useAutoLocation": false,
"weatherEnabled": true,
"dashTabs": [
{
"id": "overview",
"enabled": true
},
{
"id": "media",
"enabled": true
},
{
"id": "wallpaper",
"enabled": true
},
{
"id": "weather",
"enabled": true
},
{
"id": "settings",
"enabled": true
}
],
"networkPreference": "wifi",
"iconThemeDark": "Papirus-Dark",
"iconThemeLight": "System Default",
"iconThemePerMode": false,
"lastAppliedIconTheme": "",
"cursorSettings": {
"theme": "oreo_spark_blue_cursors",
"size": 24,
"niri": {
"hideWhenTyping": false,
"hideAfterInactiveMs": 0
},
"hyprland": {
"hideOnKeyPress": false,
"hideOnTouch": false,
"inactiveTimeout": 5
},
"dwl": {
"cursorHideTimeout": 0
}
},
"launcherLogoMode": "apps",
"launcherLogoCustomPath": "",
"launcherLogoColorOverride": "",
"launcherLogoColorInvertOnMode": false,
"launcherLogoBrightness": 0.5,
"launcherLogoContrast": 1,
"launcherLogoSizeOffset": 0,
"fontFamily": "Comfortaa Medium",
"monoFontFamily": "Source Code Pro",
"fontWeight": 400,
"fontScale": 1,
"textRenderType": 0,
"textRenderQuality": 0,
"notepadUseMonospace": true,
"notepadFontFamily": "",
"notepadFontSize": 14,
"notificationSummaryFontSize": 0,
"notificationBodyFontSize": 0,
"notepadShowLineNumbers": false,
"notepadAutoSave": false,
"notepadSlideoutSide": "right",
"notepadDefaultMode": "slideout",
"notepadTransparencyOverride": -1,
"notepadLastCustomTransparency": 0.7,
"notepadUseCompositorGap": false,
"notepadEdgeGap": 0,
"soundsEnabled": true,
"useSystemSoundTheme": false,
"soundLogin": false,
"soundNewNotification": true,
"soundVolumeChanged": false,
"soundPluggedIn": false,
"muteSoundsWhenMediaPlaying": true,
"acMonitorTimeout": 0,
"acLockTimeout": 0,
"acSuspendTimeout": 0,
"acSuspendBehavior": 0,
"acProfileName": "",
"acPostLockMonitorTimeout": 0,
"batteryMonitorTimeout": 0,
"batteryLockTimeout": 0,
"batterySuspendTimeout": 0,
"batterySuspendBehavior": 0,
"batteryProfileName": "",
"batteryPostLockMonitorTimeout": 0,
"batteryChargeLimit": 100,
"batteryNotifyChargeLimit": false,
"batteryCriticalThreshold": 10,
"batteryNotifyCritical": true,
"batteryLowThreshold": 20,
"batteryNotifyLow": false,
"batteryChargeLimitNotificationType": 0,
"batteryLowNotificationType": 0,
"batteryCriticalNotificationType": 1,
"batteryAutoPowerSaver": false,
"lockBeforeSuspend": false,
"loginctlLockIntegration": true,
"fadeToLockEnabled": true,
"fadeToLockGracePeriod": 5,
"fadeToDpmsEnabled": true,
"fadeToDpmsGracePeriod": 5,
"launchPrefix": "",
"gtkThemingEnabled": false,
"qtThemingEnabled": false,
"syncModeWithPortal": true,
"terminalsAlwaysDark": false,
"muxType": "tmux",
"muxUseCustomCommand": false,
"muxCustomCommand": "",
"muxSessionFilter": "",
"runDmsMatugenTemplates": true,
"matugenTemplateGtk": true,
"matugenTemplateNiri": false,
"matugenTemplateHyprland": false,
"matugenTemplateMangowc": false,
"matugenTemplateQt5ct": true,
"matugenTemplateQt6ct": true,
"matugenTemplateFirefox": false,
"matugenTemplatePywalfox": false,
"matugenTemplateZenBrowser": false,
"matugenTemplateVesktop": true,
"matugenTemplateVencord": true,
"matugenTemplateEquibop": false,
"matugenTemplateGhostty": false,
"matugenTemplateKitty": true,
"matugenTemplateFoot": false,
"matugenTemplateAlacritty": true,
"matugenTemplateNeovim": true,
"matugenTemplateWezterm": false,
"matugenTemplateDgop": true,
"matugenTemplateKcolorscheme": true,
"matugenTemplateVscode": false,
"matugenTemplateEmacs": false,
"matugenTemplateZed": false,
"matugenTemplateNeovimSettings": {
"dark": {
"baseTheme": "github_dark",
"harmony": 0.5
},
"light": {
"baseTheme": "github_light",
"harmony": 0.5
}
},
"matugenTemplateNeovimSetBackground": true,
"showDock": false,
"dockAutoHide": false,
"dockSmartAutoHide": false,
"dockUseOverlayLayer": false,
"dockGroupByApp": false,
"dockRestoreSpecialWorkspaceOnClick": false,
"dockOpenOnOverview": false,
"dockPosition": 1,
"dockSpacing": 4,
"dockBottomGap": 0,
"dockMargin": 0,
"dockIconSize": 40,
"dockIndicatorStyle": "circle",
"dockBorderEnabled": false,
"dockBorderColor": "surfaceText",
"dockBorderOpacity": 1,
"dockBorderThickness": 1,
"dockIsolateDisplays": false,
"dockLauncherEnabled": false,
"dockLauncherLogoMode": "apps",
"dockLauncherLogoCustomPath": "",
"dockLauncherLogoColorOverride": "",
"dockLauncherLogoSizeOffset": 0,
"dockLauncherLogoBrightness": 0.5,
"dockLauncherLogoContrast": 1,
"dockMaxVisibleApps": 0,
"dockMaxVisibleRunningApps": 0,
"dockShowOverflowBadge": true,
"dockShowTrash": false,
"dockTrashFileManager": "default",
"dockTrashCustomCommand": "",
"notificationOverlayEnabled": false,
"notificationPopupShadowEnabled": true,
"notificationPopupPrivacyMode": false,
"notificationForegroundLayers": true,
"modalDarkenBackground": true,
"lockScreenShowPowerActions": true,
"lockScreenShowSystemIcons": true,
"lockScreenShowTime": true,
"lockScreenShowDate": true,
"lockScreenShowProfileImage": true,
"lockScreenShowPasswordField": true,
"lockScreenShowMediaPlayer": true,
"lockScreenPowerOffMonitorsOnLock": false,
"lockAtStartup": false,
"enableFprint": false,
"maxFprintTries": 15,
"enableU2f": false,
"u2fMode": "or",
"lockPamPath": "",
"lockPamInlineFprint": false,
"lockPamInlineU2f": false,
"lockPamExternallyManaged": false,
"lockU2fPamPath": "",
"lockScreenInactiveColor": "#000000",
"lockScreenNotificationMode": 0,
"lockScreenVideoEnabled": false,
"lockScreenVideoPath": "",
"lockScreenVideoCycling": false,
"lockScreenWallpaperPath": "",
"lockScreenWallpaperFillMode": "",
"lockScreenFontFamily": "",
"hideBrightnessSlider": false,
"notificationTimeoutLow": 5000,
"notificationTimeoutNormal": 5000,
"notificationTimeoutCritical": 0,
"notificationCompactMode": false,
"notificationShowTimeoutBar": false,
"notificationDedupeEnabled": true,
"notificationPopupPosition": 0,
"notificationAnimationSpeed": 1,
"notificationCustomAnimationDuration": 400,
"notificationHistoryEnabled": true,
"notificationHistoryMaxCount": 50,
"notificationHistoryMaxAgeDays": 7,
"notificationHistorySaveLow": true,
"notificationHistorySaveNormal": true,
"notificationHistorySaveCritical": true,
"notificationRules": [],
"notificationFocusedMonitor": false,
"osdAlwaysShowValue": false,
"osdPosition": 5,
"osdVolumeEnabled": true,
"osdMediaVolumeEnabled": true,
"osdMediaPlaybackEnabled": true,
"osdBrightnessEnabled": true,
"osdIdleInhibitorEnabled": true,
"osdMicMuteEnabled": true,
"osdCapsLockEnabled": true,
"osdPowerProfileEnabled": true,
"osdAudioOutputEnabled": true,
"powerActionConfirm": false,
"powerActionHoldDuration": 0.5,
"powerMenuActions": [
"reboot",
"logout",
"poweroff",
"lock",
"suspend",
"restart"
],
"powerMenuDefaultAction": "logout",
"powerMenuGridLayout": false,
"customPowerActionLock": "",
"customPowerActionLogout": "",
"customPowerActionSuspend": "",
"customPowerActionHibernate": "",
"customPowerActionReboot": "",
"customPowerActionPowerOff": "",
"updaterHideWidget": false,
"updaterCheckOnStart": false,
"updaterUseCustomCommand": false,
"updaterCustomCommand": "",
"updaterTerminalAdditionalParams": "",
"updaterIntervalSeconds": 86400,
"updaterIncludeFlatpak": true,
"updaterAllowAUR": false,
"updaterIgnoredPackages": [],
"displayNameMode": "system",
"screenPreferences": {
"wallpaper": [
"all"
],
"dock": [],
"notepad": []
},
"showOnLastDisplay": {
"dock": false
},
"niriOutputSettings": {},
"hyprlandOutputSettings": {},
"displayProfiles": {},
"activeDisplayProfile": {},
"displayProfileAutoSelect": false,
"displayShowDisconnected": false,
"displaySnapToEdge": true,
"connectedFrameBarStyleBackups": {},
"barConfigs": [
{
"id": "default",
"name": "Main Bar",
"enabled": true,
"position": 0,
"screenPreferences": [
"all"
],
"showOnLastDisplay": true,
"leftWidgets": [
{
"id": "hyprlandSubmapIndicator",
"enabled": true
},
{
"id": "clock",
"enabled": true,
"clockCompactMode": false
},
{
"id": "workspaceSwitcher",
"enabled": true
}
],
"centerWidgets": [
{
"id": "music",
"enabled": true,
"mediaSize": 1
},
{
"id": "focusedWindow",
"enabled": true,
"focusedWindowCompactMode": false
}
],
"rightWidgets": [
{
"id": "systemTray",
"enabled": true
},
{
"id": "cpuUsage",
"enabled": true,
"minimumWidth": true
},
{
"id": "memUsage",
"enabled": true,
"showSwap": false
},
"notificationButton",
{
"id": "controlCenterButton",
"enabled": true,
"showNetworkIcon": true,
"showAudioPercent": true,
"showVpnIcon": false,
"showMicIcon": true,
"showBatteryIcon": true,
"showPrinterIcon": false,
"showScreenSharingIcon": false
}
],
"spacing": 4,
"innerPadding": 5,
"bottomGap": 0,
"transparency": 0.7,
"widgetTransparency": 1,
"squareCorners": false,
"noBackground": false,
"maximizeWidgetIcons": false,
"maximizeWidgetText": false,
"removeWidgetPadding": false,
"widgetPadding": 7,
"gothCornersEnabled": false,
"gothCornerRadiusOverride": false,
"gothCornerRadiusValue": 12,
"borderEnabled": false,
"borderColor": "surfaceText",
"borderOpacity": 1,
"borderThickness": 1,
"widgetOutlineEnabled": false,
"widgetOutlineColor": "primary",
"widgetOutlineOpacity": 1,
"widgetOutlineThickness": 1,
"fontScale": 1.25,
"iconScale": 1.25,
"autoHide": false,
"autoHideDelay": 250,
"showOnWindowsOpen": false,
"openOnOverview": false,
"visible": true,
"popupGapsAuto": true,
"popupGapsManual": 4,
"maximizeDetection": false,
"scrollEnabled": false,
"scrollXBehavior": "column",
"scrollYBehavior": "workspace",
"shadowIntensity": 0,
"shadowOpacity": 60,
"shadowColorMode": "text",
"shadowCustomColor": "#000000",
"clickThrough": false
}
],
"desktopClockEnabled": false,
"desktopClockStyle": "analog",
"desktopClockTransparency": 0.8,
"desktopClockColorMode": "primary",
"desktopClockCustomColor": {
"r": 1,
"g": 1,
"b": 1,
"a": 1,
"hsvHue": -1,
"hsvSaturation": 0,
"hsvValue": 1,
"hslHue": -1,
"hslSaturation": 0,
"hslLightness": 1,
"valid": true
},
"desktopClockShowDate": true,
"desktopClockShowAnalogNumbers": false,
"desktopClockShowAnalogSeconds": true,
"desktopClockX": -1,
"desktopClockY": -1,
"desktopClockWidth": 280,
"desktopClockHeight": 180,
"desktopClockDisplayPreferences": [
"all"
],
"systemMonitorEnabled": false,
"systemMonitorShowHeader": true,
"systemMonitorTransparency": 0.8,
"systemMonitorColorMode": "primary",
"systemMonitorCustomColor": {
"r": 1,
"g": 1,
"b": 1,
"a": 1,
"hsvHue": -1,
"hsvSaturation": 0,
"hsvValue": 1,
"hslHue": -1,
"hslSaturation": 0,
"hslLightness": 1,
"valid": true
},
"systemMonitorShowCpu": true,
"systemMonitorShowCpuGraph": true,
"systemMonitorShowCpuTemp": true,
"systemMonitorShowGpuTemp": false,
"systemMonitorGpuPciId": "",
"systemMonitorShowMemory": true,
"systemMonitorShowMemoryGraph": true,
"systemMonitorShowNetwork": true,
"systemMonitorShowNetworkGraph": true,
"systemMonitorShowDisk": true,
"systemMonitorShowTopProcesses": false,
"systemMonitorTopProcessCount": 3,
"systemMonitorTopProcessSortBy": "cpu",
"systemMonitorGraphInterval": 60,
"systemMonitorLayoutMode": "auto",
"systemMonitorX": -1,
"systemMonitorY": -1,
"systemMonitorWidth": 320,
"systemMonitorHeight": 480,
"systemMonitorDisplayPreferences": [
"all"
],
"systemMonitorVariants": [],
"desktopWidgetPositions": {},
"desktopWidgetGridSettings": {},
"desktopWidgetInstances": [],
"desktopWidgetGroups": [],
"builtInPluginSettings": {
"dms_settings_search": {
"trigger": "?"
},
"dms_notepad": {
"enabled": false
},
"dms_clipboard_search": {
"trigger": "cb"
}
},
"clipboardClickToPaste": false,
"clipboardEnterToPaste": false,
"clipboardRememberTypeFilter": false,
"clipboardTypeFilter": "all",
"clipboardVisibleEntryActions": [
"pin",
"edit",
"delete"
],
"launcherPluginVisibility": {},
"launcherPluginOrder": [],
"frameEnabled": false,
"frameThickness": 16,
"frameRounding": 23,
"frameColor": "",
"frameOpacity": 1,
"frameScreenPreferences": [
"all"
],
"frameBarSize": 40,
"frameShowOnOverview": false,
"frameBlurEnabled": true,
"frameCloseGaps": true,
"frameLauncherEmergeSide": "bottom",
"frameLauncherArcExtender": false,
"frameLauncherEdgeHover": false,
"frameMode": "connected",
"barInsetPaddingShared": -1,
"barInsetPaddingSyncAll": false,
"frameBarInsetPadding": -1,
"configVersion": 13
}
+276
View File
@@ -0,0 +1,276 @@
# ─────────────────────────────────────────────────────────────────────
# ╭─────────────────────────────────────────────────╮
# │ clang-format config │
# ╰─────────────────────────────────────────────────╯
# ─────────────────────────────────────────────────────────────────────
BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: BlockIndent
AlignArrayOfStructures: Left
AlignConsecutiveAssignments:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: true
AlignConsecutiveBitFields:
Enabled: true
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveDeclarations:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveMacros:
Enabled: true
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveShortCaseStatements:
Enabled: true
AcrossEmptyLines: false
AcrossComments: false
AlignCaseArrows: false
AlignCaseColons: false
AlignConsecutiveTableGenBreakingDAGArgColons:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveTableGenCondOperatorColons:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: false
AlignConsecutiveTableGenDefinitionColons:
Enabled: false
AcrossEmptyLines: false
AcrossComments: false
AlignCompound: false
AlignFunctionPointers: false
PadOperators: false
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments:
Kind: Always
OverEmptyLines: 0
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowBreakBeforeNoexceptSpecifier: Never
AllowShortBlocksOnASingleLine: Never
AllowShortCaseExpressionOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: false
AllowShortCompoundRequirementOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AttributeMacros:
- __capability
BinPackArguments: false
BinPackParameters: false
BitFieldColonSpacing: Both
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: true
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakAdjacentStringLiterals: true
BreakAfterAttributes: Always
BreakAfterJavaFieldAnnotations: false
BreakAfterReturnType: None
BreakArrays: true
BreakBeforeBinaryOperators: All
BreakBeforeBraces: Attach
BreakBeforeConceptDeclarations: Always
BreakBeforeInlineASMColon: OnlyMultiline
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeColon
BreakFunctionDefinitionParameters: false
BreakInheritanceList: BeforeColon
BreakStringLiterals: true
BreakTemplateDeclarations: MultiLine
ColumnLimit: 100
CommentPragmas: "^ IWYU pragma:"
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: true
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: Always
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
- Regex: ^"(llvm|llvm-c|clang|clang-c)/
Priority: 2
SortPriority: 0
CaseSensitive: false
- Regex: ^(<|"(gtest|gmock|isl|json)/)
Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: .*
Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: (Test)?$
IncludeIsMainSourceRegex: ""
IndentAccessModifiers: true
IndentCaseBlocks: true
IndentCaseLabels: true
IndentExternBlock: AfterExternBlock
IndentGotoLabels: true
IndentPPDirectives: BeforeHash
IndentRequiresClause: true
IndentWidth: 4
IndentWrappedFunctionNames: true
InsertBraces: false
InsertNewlineAtEOF: false
InsertTrailingCommas: None
IntegerLiteralSeparator:
Binary: 0
BinaryMinDigits: 0
Decimal: 0
DecimalMinDigits: 0
Hex: 0
HexMinDigits: 0
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLines:
AtEndOfFile: false
AtStartOfBlock: true
AtStartOfFile: true
LambdaBodyIndentation: Signature
LineEnding: DeriveLF
MacroBlockBegin: ""
MacroBlockEnd: ""
MainIncludeChar: Quote
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PPIndentWidth: -1
PackConstructorInitializers: BinPack
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakScopeResolution: 500
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
QualifierAlignment: Left
ReferenceAlignment: Pointer
ReflowComments: true
RemoveBracesLLVM: true
RemoveParentheses: MultipleParentheses
RemoveSemicolon: false
RequiresClausePosition: OwnLine
RequiresExpressionIndentation: OuterScope
SeparateDefinitionBlocks: Always
ShortNamespaceLines: 1
SkipMacroDefinitionBody: false
SortIncludes: CaseSensitive
SortJavaStaticImport: Before
SortUsingDeclarations: LexicographicNumeric
SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeJsonColon: false
SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterForeachMacros: true
AfterFunctionDeclarationName: true
AfterFunctionDefinitionName: true
AfterIfMacros: true
AfterOverloadedOperator: false
AfterPlacementOperator: true
AfterRequiresInClause: false
AfterRequiresInExpression: false
BeforeNonEmptyParentheses: false
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInContainerLiterals: true
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParens: Custom
SpacesInParensOptions:
ExceptDoubleParentheses: false
InConditionalStatements: true
InCStyleCasts: false
InEmptyParentheses: false
Other: true
SpacesInSquareBrackets: true
Standard: Latest
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
TableGenBreakInsideDAGArg: DontBreak
UseTab: Never
VerilogBreakBetweenInstancePorts: true
WhitespaceSensitiveMacros:
- BOOST_PP_STRINGIZE
- CF_SWIFT_NAME
- NS_SWIFT_NAME
- PP_STRINGIZE
- STRINGIZE
+744
View File
@@ -0,0 +1,744 @@
import eslint from '@eslint/js';
import globals from 'globals';
import stylistic from '@stylistic/eslint-plugin';
import tseslint from 'typescript-eslint';
import typescript from '@typescript-eslint/eslint-plugin';
import vue from 'eslint-plugin-vue';
const style = {
'plugins': {
'@stylistic': stylistic,
'@stylistic/js': stylistic,
'@stylistic/ts': stylistic
},
'files': [
'**/*.ts',
'**/*.js',
'**/*.mjs',
'**/*.cjs',
'**/*.tsx',
'**/*.jsx'
],
'rules': {
'sort-imports': [
'warn',
{
'ignoreCase': false,
'ignoreDeclarationSort': false,
'ignoreMemberSort': false,
'memberSyntaxSortOrder': [
'none',
'all',
'multiple',
'single'
],
'allowSeparatedGroups': false
}
],
// Formatting
'@stylistic/array-bracket-newline': [
'error',
{
'multiline': false,
'minItems': 2
}
],
'@stylistic/array-bracket-spacing': [
'error',
'always'
],
'@stylistic/array-element-newline': [
'error',
{
'consistent': false,
'multiline': false,
'minItems': 2
}
],
'@stylistic/arrow-parens': [
'error',
'as-needed'
],
'@stylistic/arrow-spacing': [
'error',
{
'before': true,
'after': true
}
],
'@stylistic/block-spacing': [
'error',
'always'
],
'@stylistic/brace-style': [
'error',
'1tbs',
{
'allowSingleLine': false
}
],
'@stylistic/comma-dangle': [
'error',
'never'
],
'@stylistic/comma-spacing': [
'error',
{
'before': false,
'after': true
}
],
'@stylistic/comma-style': [
'error',
'last'
],
'@stylistic/dot-location': [
'error',
'property'
],
'@stylistic/function-call-argument-newline': [
'error',
'consistent'
],
'@stylistic/function-call-spacing': [
'error',
'never'
],
'@stylistic/function-paren-newline': [
'error',
'multiline-arguments'
],
'@stylistic/implicit-arrow-linebreak': [
'error',
'beside'
],
'@stylistic/indent': [
'error',
4
],
'@stylistic/indent-binary-ops': [
'error',
4
],
'@stylistic/key-spacing': [
'error',
{
'beforeColon': false,
'afterColon': true
}
],
'@stylistic/keyword-spacing': [
'error',
{
'before': true,
'after': true
}
],
'@stylistic/lines-between-class-members': [
'error',
'always'
],
'@stylistic/max-len': [
'warn',
{
'code': 140,
'comments': 160,
'ignoreComments': false,
'ignoreUrls': true,
'ignoreStrings': true,
'ignoreTemplateLiterals': true,
'ignoreRegExpLiterals': true
}
],
'@stylistic/max-statements-per-line': [
'error',
{
'max': 1
}
],
'@stylistic/multiline-ternary': [
'error',
'always-multiline'
],
'@stylistic/new-parens': [
'error',
'always'
],
'@stylistic/newline-per-chained-call': 'error',
'@stylistic/no-confusing-arrow': 'error',
'@stylistic/no-extra-parens': [
'error',
'all',
{
'nestedBinaryExpressions': false,
'ternaryOperandBinaryExpressions': false,
'ignoreJSX': 'multi-line',
'nestedConditionalExpressions': false
}
],
'@stylistic/no-extra-semi': 'error',
'@stylistic/no-floating-decimal': 'error',
'@stylistic/no-mixed-operators': 'error',
'@stylistic/no-mixed-spaces-and-tabs': 'error',
'@stylistic/no-multi-spaces': 'error',
'@stylistic/no-multiple-empty-lines': [
'error',
{
'max': 3,
'maxEOF': 2
}
],
'@stylistic/no-tabs': 'error',
'@stylistic/no-trailing-spaces': 'error',
'@stylistic/no-whitespace-before-property': 'error',
'@stylistic/object-curly-newline': [
'error',
{
'multiline': true,
'minProperties': 1
}
],
'@stylistic/object-curly-spacing': [
'error',
'always'
],
'@stylistic/object-property-newline': 'error',
'@stylistic/one-var-declaration-per-line': 'error',
'@stylistic/operator-linebreak': [
'error',
'before'
],
'@stylistic/padded-blocks': [
'error',
{
'blocks': 'never',
'classes': 'always',
'switches': 'never'
}
],
// Padding lines. The most in-depth part of this config
'@stylistic/padding-line-between-statements': [
'error',
// Variables, Constants
{
'blankLine': 'never',
'prev': 'var',
'next': 'var'
},
{
'blankLine': 'never',
'prev': 'let',
'next': 'let'
},
{
'blankLine': 'never',
'prev': 'const',
'next': 'const'
},
{
'blankLine': 'always',
'prev': 'var',
'next': [
'block',
'block-like',
'break',
'cjs-export',
'cjs-import',
'class',
'const',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'import',
'let',
'return',
'switch',
'throw',
'try',
'var',
'with'
]
},
{
'blankLine': 'always',
'prev': 'let',
'next': [
'block',
'block-like',
'break',
'cjs-export',
'cjs-import',
'class',
'const',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'import',
'return',
'switch',
'throw',
'try',
'var',
'while',
'with'
]
},
{
'blankLine': 'always',
'prev': 'const',
'next': [
'block',
'block-like',
'break',
'cjs-export',
'cjs-import',
'class',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'import',
'let',
'return',
'switch',
'throw',
'try',
'var',
'while',
'with'
]
},
// Import
{
'blankLine': 'never',
'prev': 'import',
'next': 'import'
},
{
'blankLine': 'never',
'prev': 'cjs-import',
'next': 'cjs-import'
},
{
'blankLine': 'always',
'prev': [
'block',
'block-like',
'break',
'cjs-export',
'class',
'const',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'let',
'return',
'switch',
'throw',
'try',
'var',
'while',
'with'
],
'next': 'cjs-import'
},
{
'blankLine': 'always',
'prev': 'cjs-import',
'next': [
'block',
'block-like',
'break',
'cjs-export',
'class',
'const',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'let',
'return',
'switch',
'throw',
'try',
'var',
'while',
'with'
]
},
{
'blankLine': 'always',
'prev': [
'block',
'block-like',
'break',
'cjs-export',
'class',
'const',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'let',
'return',
'switch',
'throw',
'try',
'var',
'while',
'with'
],
'next': 'import'
},
{
'blankLine': 'always',
'prev': 'import',
'next': [
'block',
'block-like',
'break',
'cjs-export',
'class',
'const',
'continue',
'debugger',
'directive',
'do',
'empty',
'export',
'expression',
'for',
'function',
'if',
'iife',
'let',
'return',
'switch',
'throw',
'try',
'var',
'while',
'with'
]
},
// If
{
'blankLine': 'always',
'prev': '*',
'next': 'if'
},
{
'blankLine': 'always',
'prev': 'if',
'next': '*'
},
// For
{
'blankLine': 'always',
'prev': '*',
'next': 'for'
},
{
'blankLine': 'always',
'prev': 'for',
'next': '*'
},
// While
{
'blankLine': 'always',
'prev': '*',
'next': 'while'
},
{
'blankLine': 'always',
'prev': 'while',
'next': '*'
},
// Functions
{
'blankLine': 'always',
'prev': '*',
'next': 'function'
},
{
'blankLine': 'always',
'prev': 'function',
'next': '*'
},
// Block Statements
{
'blankLine': 'always',
'prev': '*',
'next': 'block-like'
},
{
'blankLine': 'always',
'prev': 'block-like',
'next': '*'
},
// Switch
{
'blankLine': 'always',
'prev': '*',
'next': 'switch'
},
{
'blankLine': 'always',
'prev': 'switch',
'next': '*'
},
// Try-Catch
{
'blankLine': 'always',
'prev': '*',
'next': 'try'
},
{
'blankLine': 'always',
'prev': 'try',
'next': '*'
},
// Throw
{
'blankLine': 'always',
'prev': '*',
'next': 'throw'
},
{
'blankLine': 'always',
'prev': 'throw',
'next': '*'
},
// Return
{
'blankLine': 'never',
'prev': 'return',
'next': '*'
},
{
'blankLine': 'always',
'prev': '*',
'next': 'return'
},
// Export
{
'blankLine': 'always',
'prev': '*',
'next': 'export'
},
{
'blankLine': 'always',
'prev': 'export',
'next': '*'
},
{
'blankLine': 'always',
'prev': '*',
'next': 'cjs-export'
},
{
'blankLine': 'always',
'prev': 'cjs-export',
'next': '*'
},
// Classes
{
'blankLine': 'always',
'prev': '*',
'next': 'class'
},
{
'blankLine': 'always',
'prev': 'class',
'next': '*'
}
],
'@stylistic/quote-props': [
'error',
'always'
],
'@stylistic/quotes': [
'error',
'single'
],
'@stylistic/rest-spread-spacing': [
'error',
'never'
],
'@stylistic/semi': [
'error',
'always'
],
'@stylistic/semi-spacing': [
'error',
{
'before': false,
'after': true
}
],
'@stylistic/semi-style': [
'error',
'last'
],
'@stylistic/space-before-blocks': [
'error',
'always'
],
'@stylistic/space-before-function-paren': [
'error',
'always'
],
'@stylistic/space-in-parens': [
'error',
'always'
],
'@stylistic/space-infix-ops': [
'error',
{
'int32Hint': false
}
],
'@stylistic/space-unary-ops': 'error',
'@stylistic/spaced-comment': [
'error',
'always'
],
'@stylistic/switch-colon-spacing': 'error',
'@stylistic/template-curly-spacing': [
'error',
'always'
],
'@stylistic/template-tag-spacing': [
'error',
'always'
],
'@stylistic/type-generic-spacing': 'error',
'@stylistic/type-named-tuple-spacing': 'error',
'@stylistic/wrap-iife': [
'error',
'inside'
],
'@stylistic/wrap-regex': 'error',
'@stylistic/ts/type-annotation-spacing': 'error'
}
};
/** @type {import('eslint').Linter.Config} */
export default tseslint.config(
// Base JavaScript rules
eslint.configs.recommended,
tseslint.configs.recommended,
style,
// Vue support (including TS and JSX inside SFCs)
{
'files': [ '**/*.vue' ],
'languageOptions': {
'sourceType': 'module',
'ecmaVersion': 'latest',
'globals': globals.browser,
'parserOptions': {
'parser': tseslint.parser
}
},
'plugins': {
'vue': vue,
'@stylistic': stylistic,
'@stylistic/js': stylistic,
'@stylistic/ts': stylistic,
'@typescript-eslint': typescript
},
'extends': [
eslint.configs.recommended,
...vue.configs['flat/recommended']
],
'rules': {
...typescript.configs.recommended.rules,
...style.rules,
// Vue specific rules
'@stylistic/indent': 'off',
'vue/html-indent': [
'error',
4
],
'vue/html-comment-indent': [
'error',
4
],
'vue/script-indent': [
'error',
4,
{
'baseIndent': 1,
'switchCase': 1
}
],
'vue/html-self-closing': [
'error',
{
'html': {
'void': 'never',
'normal': 'never',
'component': 'always'
},
'svg': 'always',
'math': 'never'
}
],
'vue/max-attributes-per-line': [
'error',
{
'singleline': 3,
'multiline': 1
}
]
}
}
);
+86
View File
@@ -0,0 +1,86 @@
# Use spaces for indent (because f*k tabs)
defaultIndent: " "
# Limit Number of backups
maxNumberOfBackups: 3
verbatimEnvironments:
verbatim: 1
lstlisting: 1
minted: 1
code: 1
indentRules:
recall: " "
remarks: " "
remark: " "
guides: " "
properties: " "
restrictions: " "
limitations: " "
terms: " "
notation: " "
usage: " "
task: " "
proof: " "
general: " "
simplebox: " "
definition: " "
theorem: " "
lemma: " "
corollary: " "
axiom: " "
fact: " "
proposition: " "
example: " "
formula: " "
conjugation: " "
forms: " "
lookForAlignDelims:
tables:
delims: 1
alignDoubleBackSlash: 1
spacesBeforeDoubleBackSlash: 1
multiColumnGrouping: 0
alignRowsWithoutMaxDelims: 1
spacesBeforeAmpersand: 1
spacesAfterAmpersand: 1
justification: left
alignFinalDoubleBackSlash: 0
dontMeasure: 0
delimiterRegEx: (?<!\\)(&)
delimiterJustification: left
lookForChildCodeBlocks: 1
alignContentAfterDoubleBackSlash: 0
spacesAfterDoubleBackSlash: 1
specialBeginEnd:
If:
begin: '\\If'
middle:
- '\\ElsIf'
- '\\Else'
end: '\\EndIf'
lookForThis: 1
For:
begin: '\\For'
end: '\\EndFor'
lookForThis: 1
Procedure:
begin: '\\Procedure'
end: '\\EndProcedure'
lookForThis: 1
Function:
begin: '\\Function'
end: '\\EndFunction'
lookForThis: 1
While:
begin: '\\While'
end: '\\EndWhile'
lookForThis: 1
Repeat:
begin: '\\Repeat'
end: '\\Until'
lookForThis: 1
specialBeforeCommand: 1
+2
View File
@@ -0,0 +1,2 @@
paths:
- /home/janis/projects/system/dotfiles/linters/indentconfig.yaml
+8
View File
@@ -0,0 +1,8 @@
{
"devDependencies": {
"@eslint/js": "^9.28.0",
"@stylistic/eslint-plugin": "^4.4.1",
"eslint-plugin-vue": "^10.2.0",
"typescript-eslint": "^8.33.1"
}
}
+28
View File
@@ -1 +1,29 @@
import decman
from modules.core import utilities
from modules.core.system import base, pipewire
from modules.core.applications import dev_tools, games, steering_wheel, virtual_machines
from modules.core.ui import file_manager, fonts, hyprland, login, shell
from modules.coding import latex, neovim
if decman.aur:
decman.aur.ignored_packages |= {"yay"}
if decman.pacman:
decman.pacman.ignored_packages |= {"yay", "aylurs-gtk-shell"}
decman.modules += [
base.BasePackages("desktop"),
pipewire.Pipewire(),
dev_tools.DevTools(),
games.Games(),
steering_wheel.SteeringWheel(),
file_manager.FileManager(),
fonts.Fonts(),
hyprland.Hyprland(),
login.LoginManager("desktop"),
shell.DesktopShell(),
neovim.Neovim(),
latex.Latex(),
utilities.UtilPackages(),
virtual_machines.VirtualMachines(),
]
+34 -7
View File
@@ -1,8 +1,10 @@
import decman
from decman.plugins import pacman
import config
class BaseModule(decman.Module):
class Latex(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("latex")
@@ -10,14 +12,39 @@ class BaseModule(decman.Module):
@pacman.packages
def pkgs(self) -> set[str]:
return {
"texlive",
"texlive-langgerman",
"biber",
"perl-yaml-tiny",
"perl-file-homedir",
"biber",
"python-pygments",
"texlab",
"texlive-basic",
"texlive-bibtexextra",
"texlive-binextra",
"texlive-context",
"texlive-fontsextra",
"texlive-fontsrecommended",
"texlive-fontutils",
"texlive-formatsextra",
"texlive-games",
"texlive-humanities",
"texlive-latex",
"texlive-latexextra",
"texlive-latexrecommended",
"texlive-luatex",
"texlive-mathscience",
"texlive-metapost",
"texlive-music",
"texlive-pictures",
"texlive-plaingeneric",
"texlive-pstricks",
"texlive-publishers",
"texlive-xetex",
"texlive-langgerman",
}
def on_enable(self, store: decman.Store):
# TODO: clone the git repo
return super().on_enable(store)
def files(self) -> dict[str, decman.File]:
return {
f"/home/{config.user}.indentconfig.yaml": decman.File(
source_file="./linters/indentconfig.yaml"
)
}
+2 -3
View File
@@ -2,7 +2,7 @@ import decman
from decman.plugins import pacman, aur
class NeovimModule(decman.Module):
class Neovim(decman.Module):
def __init__(self):
"""Neovim Packages"""
super().__init__("neovim")
@@ -23,5 +23,4 @@ class NeovimModule(decman.Module):
@aur.packages
def aurpkgs(self) -> set[str]:
# Consider switching to WiVRN
return {"bs-manager-bin", "alvr-bin"}
return {"shell-color-scripts-git", "nvimpager"}
+25 -2
View File
@@ -1,4 +1,5 @@
import decman
import config
from decman.plugins import pacman
@@ -13,16 +14,38 @@ class DevTools(decman.Module):
"act",
"cronie",
"cloc",
"cmake",
"dart-sass",
"docker",
"docker-buildx",
"docker-compose",
"filezilla",
"kitty",
"lazygit",
"git-lfs",
"hugo",
"helm",
"kitty",
"kubectl",
"lazygit",
"meld",
"meson",
"minisign",
"python-argcomplete",
"python-black",
"python-build",
"python-colorama",
"python-installer",
"python-jsonschema",
"python-pip",
"python-pyaml",
"python-numpy",
"python-scipy",
"python-sympy",
"serpl",
"terminator",
}
def directories(self) -> dict[str, decman.Directory]:
return {
f"/home/{config.user}/.config/lazygit": decman.Directory("./config/lazygit", owner=config.user, group=config.user),
f"/home/{config.user}/.config/kitty": decman.Directory("./config/kitty", owner=config.user, group=config.user),
}
+8 -5
View File
@@ -12,12 +12,15 @@ class Games(decman.Module):
return {
"android-udev",
"android-tools",
"lib32-vulkan-radeon",
"vulkan-radeon",
"steam",
"prismlauncher",
"gamemmode",
"gamemode",
"gamescope",
# "lib32-vulkan-radeon",
"obs-studio",
"obs-studio-plugin-browser",
"prismlauncher",
"steam",
"vulkan-radeon",
"v4l2loopback-dkms",
}
@aur.packages
+1 -1
View File
@@ -2,7 +2,7 @@ import decman
from decman.plugins import aur
class BasePackages(decman.Module):
class SteeringWheel(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("steering-wheel")
@@ -0,0 +1,27 @@
import decman
from decman.plugins import pacman
import config
class VirtualMachines(decman.Module):
def __init__(self):
"""Set up virtual machines"""
super().__init__("virtualmachines")
@pacman.packages
def pkgs(self) -> set[str]:
return {
"dnsmasq",
"libayatana-appindicator",
"libvirt-python",
"lvm2",
"qemu-base",
"vde2",
"virt-manager",
"virt-viewer",
}
def on_enable(self, store: decman.Store):
# TODO: Everywhere, make user configurable
decman.prg(["usermod", "-G", "libvirt", "-a", config.user])
+41 -12
View File
@@ -1,44 +1,73 @@
from typing import Literal
import decman
from decman.plugins import pacman, aur
class BasePackages(decman.Module):
def __init__(self):
def __init__(self, platform: Literal["desktop", "laptop"]):
"""Base packages that should never be uninstalled"""
self._platform: Literal["desktop", "laptop"] = platform
super().__init__("base")
@pacman.packages
def pkgs(self) -> set[str]:
return {
"base",
"base-devel",
"cifs-utils",
"cups",
"dosfstools",
"efibootmgr",
"exfatprogs",
"git",
"grub",
"gsl",
"libisoburn",
"libguestfs",
"libmicrohttpd",
"linux",
"linux-firmware",
"linux-headers",
"lzop",
"mesa",
"mesa-utils",
"mtools",
"ntfs-3g",
"ntfsprogs",
"networkmanager",
"git",
"pacman-contrib",
"plymouth",
"reflector",
"samba",
"sdl12-compat",
"sdl2-compat",
"sudo",
"systemd-resolvconf",
"trash-cli",
"base-devel",
"cifs",
"reflector",
"paccache",
"plymouth"
}
@aur.packages
def aurpkgs(self) -> set[str]:
return {"decman"}
# TODO:
# def file_variables(self) -> dict[str, str]:
# return super().file_variables()
def files(self) -> dict[str, decman.File]:
return {
"/etc/mkinitcpio.conf": decman.File(source_file="./system/mkinitcpio.conf"),
"/etc/pacman.conf": decman.File(source_file="./system/pacman.conf"),
"/etc/default/grub": decman.File(source_file="./system/grub"),
}
# TODO: File substitutions (for PC and laptop)
if self._platform == "desktop":
return {
"/etc/mkinitcpio.conf": decman.File(
source_file="./system/mkinitcpio.conf"
),
"/etc/pacman.conf": decman.File(source_file="./system/pacman.conf"),
"/etc/default/grub": decman.File(source_file="./system/grub"),
"/etc/environment": decman.File(source_file="./system/environment"),
}
else:
return {}
def on_change(self, store):
decman.prg(["mkinitcpio", "-P"])
+5 -4
View File
@@ -1,19 +1,20 @@
import decman
from decman.plugins import pacman, aur
from decman.plugins import pacman
class BaseModule(decman.Module):
class Pipewire(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("base")
super().__init__("pipewire")
@pacman.packages
def pkgs(self) -> set[str]:
return {
"gst-plugin-pipewire",
"pavucontrol",
"pipewire",
"pipewire-alsa",
"pipewire-pulse",
"pipewire-jack",
"wireplumber",
"pavucontrol",
}
-22
View File
@@ -1,22 +0,0 @@
# NOTE: Bar will be rewritten in QuickShell likely
import decman
from decman.plugins import pacman, aur
class LoginManager(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("base")
@pacman.packages
def pkgs(self) -> set[str]:
return {
# "quickshell",
"playerctl",
"playerctl",
}
@aur.packages
def aurpkgs(self) -> set[str]:
# TODO: Rewrite bar in quickshell
return {"aylurs-gtk-shell"}
+20 -10
View File
@@ -1,27 +1,37 @@
import decman
from decman.plugins import pacman, aur
import config
class BaseModule(decman.Module):
class FileManager(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("yazi")
super().__init__("filemanager")
@pacman.packages
def pkgs(self) -> set[str]:
return {
"yazi",
"ifuse",
"libimobiledevice",
"fuse2",
"movit",
"ouch",
"grub",
"linux",
"networkmanager",
"git",
"base-devel",
"resvg",
"yazi",
}
@aur.packages
def aurpkgs(self) -> set[str]:
return {"xdg-desktop-portal-termfilechooser-hunkyburrito-git"}
def files(self) -> dict[str, decman.File]:
return super().files()
def directories(self) -> dict[str, decman.Directory]:
return {
f"/home/{config.user}/.config/xdg-desktop-portal": decman.Directory(
"./config/xdg-desktop-portal", owner=config.user, group=config.user
),
f"/home/{config.user}/.config/xdg-desktop-portal-termfilechooser": decman.Directory(
"./config/xdg-desktop-portal-termfilechooser", owner=config.user, group=config.user
),
f"/home/{config.user}/.config/yazi": decman.Directory("./config/yazi", owner=config.user, group=config.user),
}
+2 -2
View File
@@ -2,7 +2,7 @@ import decman
from decman.plugins import pacman, aur
class BaseModule(decman.Module):
class Fonts(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("fonts")
@@ -10,7 +10,7 @@ class BaseModule(decman.Module):
@pacman.packages
def pkgs(self) -> set[str]:
return {
"adobe-source-code-pro-fonts"
"adobe-source-code-pro-fonts",
"ttf-fantasque-nerd",
"ttf-jetbrains-mono-nerd",
"ttf-iosevka-nerd",
+22 -15
View File
@@ -1,33 +1,40 @@
import decman
from decman.plugins import pacman, aur
from decman.plugins import pacman
import config
class BaseModule(decman.Module):
class Hyprland(decman.Module):
def __init__(self):
"""Base packages that should never be uninstalled"""
super().__init__("base")
super().__init__("hyprland")
@pacman.packages
def pkgs(self) -> set[str]:
return {
"cliphist",
# "grimblast",
"hyprland",
"hyprlock",
"hypridle",
"hyprshutdown",
"grimblast",
"grim",
"xdg-desktop-portal-hyprland",
"hyprpolkitagent",
"hyprpaper",
"wl-clipboard",
"cliphist",
"hyrplauncher",
"hyprpwcenter",
"hyprtoolkit",
"hyprpolkitagent",
"hyprpaper",
"libappindicator",
"rtkit",
"wl-clipboard",
"wev",
"xdg-desktop-portal-hyprland",
}
def directories(self) -> dict[str, decman.Directory]:
return super().directories()
def on_change(self, store: decman.Store):
return super().on_change(store)
return {
f"/home/{config.user}/.config/hypr": decman.Directory(
"./config/hypr", owner=config.user, group=config.user
),
f"/home/{config.user}/.config/wlogout": decman.Directory(
"./config/wlogout", owner=config.user, group=config.user
)
}
+11 -3
View File
@@ -8,7 +8,7 @@ class LoginManager(decman.Module):
def __init__(self, platform: Literal["desktop", "laptop"]):
"""Base packages that should never be uninstalled"""
self._platform: Literal["desktop", "laptop"] = platform
super().__init__("base")
super().__init__("login")
@pacman.packages
def pkgs(self) -> set[str]:
@@ -20,11 +20,19 @@ class LoginManager(decman.Module):
else:
return {"gdm"}
# TODO: Config files for laptop and desktop
@systemd.units
def units(self) -> set[str]:
if self._platform == "desktop":
return {"greetd.service"}
else:
return {"gdm.service"}
def files(self) -> dict[str, decman.File]:
if self._platform == "desktop":
return {
"/etc/greetd/config.toml": decman.File("./system/greetd/config.toml"),
"/etc/pam.d/greetd": decman.File("./system/greetd/pam"),
}
else:
# TODO: GDM config files
return {}
+21
View File
@@ -0,0 +1,21 @@
# NOTE: Bar may eventually be replaced by custom bar
import decman
from decman.plugins import pacman
import config
class DesktopShell(decman.Module):
def __init__(self):
"""DesktopShell"""
super().__init__("desktopshell")
@pacman.packages
def pkgs(self) -> set[str]:
return {"dms-shell", "cava", "matugen", "papirus-icon-theme", "adw-gtk-theme", "power-profiles-daemon", "qt6ct"}
# TODO: Copy the config of dms, once done
def directories(self) -> dict[str, decman.Directory]:
return {
f"/home/{config.user}/.config/matugen": decman.Directory("./config/matugen", owner=config.user, group=config.user)
}
+28 -5
View File
@@ -1,6 +1,8 @@
import decman
from decman.plugins import pacman, aur
import config
class UtilPackages(decman.Module):
def __init__(self):
@@ -11,10 +13,10 @@ class UtilPackages(decman.Module):
def pkgs(self) -> set[str]:
return {
"bashtop",
"brightnessctl",
"bind",
"bluez",
"bluez-utils",
"blueman",
"dig",
"clamav",
"evince",
"fastfetch",
"fd",
@@ -24,16 +26,19 @@ class UtilPackages(decman.Module):
"fzf",
"gdu",
"gimp",
"go",
"gnome-disk-utility",
"gwenview",
"handbrake",
"iptables",
"libdvdcss",
"man-pages",
"man-db",
"mpv",
"nextcloud-client",
"obs-studio",
"okular",
"openconnect",
"os-prober",
"qalculate-qt",
"ripgrep",
"simple-scan",
@@ -48,8 +53,26 @@ class UtilPackages(decman.Module):
"zathura-pdf-poppler",
"zip",
"zoxide",
"networkmanager-openconnect",
}
@aur.packages
def aurpkgs(self) -> set[str]:
return {"librewolf-bin", "brave-bin", "vesktop-bin", "uxplay", "git-credential-manager-bin"}
return {
"librewolf-bin",
"brave-bin",
"vesktop-bin",
"uxplay",
"git-credential-manager-bin",
"gradia",
"parabolic",
}
def directories(self) -> dict[str, decman.Directory]:
return {
f"/home/{config.user}/.config/fish": decman.Directory("./config/fish", owner=config.user, group=config.user),
f"/home/{config.user}/.config/fastfetch": decman.Directory(
"./config/fastfetch", owner=config.user, group=config.user
),
f"/home/{config.user}/.config/mpv": decman.Directory("./config/mpv", owner=config.user, group=config.user),
}
-5
View File
@@ -1,5 +0,0 @@
import decman
class SystemTheme(decman.Module):
pass
-4
View File
@@ -1,4 +0,0 @@
#!/bin/sh
mkdir ~/.config/quickshell | true
cp -r ./config/quickshell/* ~/.config/quickshell/
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
SCRIPT_DIR=$(dirname "$0")
node "$SCRIPT_DIR/util/auto-renamer/index.js" $@
+14
View File
@@ -0,0 +1,14 @@
#!/bin/sh
extension="out"
read -p "Pick extension to convert from: " extension
outfolder="out"
outext="mp4"
read -p "Output folder: " outfolder
read -p "Output extension: " outext
mkdir $outfolder
for file in *.$extension; do
ffmpeg -i "$file" "$outfolder/${file%.$extension}.$outext"
echo "\n\n==> Conversion complete\n\n"
done
+89
View File
@@ -0,0 +1,89 @@
#!/bin/sh
base_path="~/projects/system/dev-env/scripts/"
mount_path=$(pwd)
if [[ -n "$2" ]]; then
name=$2
else
name=$(pwd | rev | cut -d "/" -f 1-2 | rev | sed -e 's/\//-/')
fi
if [[ $1 == "help" ]]; then
echo "
dev-containers [container|rm|help] [name]
Container can be one of:
- base
- node
- php
- python
- torch-rocm
- vue
- webserver
rm removes the container for the current directory if provided name is existing container, or unspecified.
"
exit 0
fi
echo "
janishutz dev containers
"
if [[ $(systemctl is-active docker) != "active" ]]; then
echo "
-> Docker daemon not running, starting with systemctl <-
"
sudo systemctl start docker
fi
if [[ $1 == "rm" ]]; then
echo "
-> Removing containers with $name in their name <-
"
if [[ $(read -p "Do you really want to delete ALL containers for this directory? (y/N) " response && echo $response) == 'y' ]]; then
for container in $(docker container ls -aq -f name=$name); do
docker stop $container
docker container rm $container
done
else
echo "Aborting."
exit 0
fi
elif [[ $1 == "shell" ]]; then
containers=$(docker ps -q -f name=$name)
count=$((${#containers[@]}))
if [[ ${containers[0]} == "" ]]; then
count=$(($count-1))
fi
if [[ $count == 0 ]]; then
echo "
-> No suitable running container found. Aborting.
"
elif [[ $count == 1 ]]; then
echo "
-> Connecting to running container ${containers[0]}
"
docker exec -it ${containers[0]} '/bin/bash'
else
echo "
-> Multiple possible containers found to attach to. Pick one (enter number)
"
docker ps -f name=$name
read -p "Enter number (1-$count) " sel
docker exec -it ${containers[$(($sel-1))]} '/bin/bash'
fi
else
name=$name-$1
if [[ $(docker container ls -aq -f name=$name) != "" ]]; then
echo "
-> Starting existing container $name <-
"
docker start -i $name
else
echo "
-> Creating container $name <-
"
eval "${base_path}$1-container $name $mount_path"
fi
fi
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env bash
connect() {
read -sp $'Please enter your Encryption Password: ' encpass
echo "
==> Connecting"
TOKEN=$(cat ~/.local/share/ethz-vpn-connect/ethzvpntoken.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
PASSWORD=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnpass.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
USERNAME=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnusername.txt)
echo $PASSWORD | sudo openconnect -b -u $USERNAME@student-net.ethz.ch -g student-net --useragent=AnyConnect --no-external-auth --passwd-on-stdin --token-mode=totp --token-secret=sha1:base32:$TOKEN sslvpn.ethz.ch
if [ $? -ne 0 ]; then
echo ' ==> Failed to connect <=='
else
echo ' ==> Connected <==
'
fi
encpass=""
PASSWORD=""
TOKEN=""
}
disconnect() {
sudo killall -v -SIGINT openconnect
echo " ==> Disconnected"
}
setup() {
echo 'You are about to overwrite your secrets. Press ctrl + C to cancel.'
read -p 'Please enter your ETHZ-Username: ' USERNAME
read -sp 'Please choose and enter your Encryption Password (will be required when launching): ' encpass
echo ""
read -sp 'Please enter your ETHZ WLAN (= Radius) Password: ' PASSWORD
echo ""
read -sp 'Please enter your ETHZ OTP Secret: ' TOKEN
echo ""
if [[ -d ~/.local/share/ethz-vpn-connect ]]; then
rm -rf ~/.local/share/ethz-vpn-connect
fi
mkdir ~/.local/share/ethz-vpn-connect
echo $PASSWORD | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpnpass.secret
echo $TOKEN | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpntoken.secret
echo $USERNAME >~/.local/share/ethz-vpn-connect/ethzvpnusername.txt
encpass=""
PASSWORD=""
TOKEN=""
if [ $? -ne 0 ]; then
echo ' ==> Failed to set secrets <=='
else
echo ' ==> Secrets set <==\n'
fi
}
case "$1" in
'connect')
connect
;;
c)
connect
;;
'disconnect')
disconnect
;;
d)
disconnect
;;
dc)
disconnect
;;
setup)
setup
;;
*)
echo -e 'Usage: ethz-vpn [Option] \n [Option]: \n connect, c: Connect VPN \n disconnect, d, dc: Disconnect VPN \n setup: set secrets and eth-Username.\n'
;;
esac
+20
View File
@@ -0,0 +1,20 @@
#!/bin/sh
if [[ -n $1 ]]; then
echo "File contains $(pdfinfo $1 | awk '/^Pages:/ {print $2}') pages"
else
total=0
count=0
for file in $(find . -name "*.pdf" -type f | sort -n | grep pdf); do
count_file=$(pdfinfo $file | awk '/^Pages:/ {print $2}')
echo "$count_file pages in $file"
total=$(($total + count_file))
count=$((count + 1))
done
echo "
-> Total page count: $total
-> Total files: $count
-> Median: $(($total / $count))
"
fi
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
echo "Word count is $(pdftotext $1 - | tr -d '.' | wc -w)"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
SCRIPT_DIR=$(dirname "$0")
cp "$SCRIPT_DIR/../linters/clang-format" ./.clang-format
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
SCRIPT_DIR=$(dirname "$0")
cp "$SCRIPT_DIR/../linters/eslint.config.mjs" .
echo "Install @eslint/js typescript-eslint @stylistic/eslint-plugin eslint-plugin-vue globals"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
SCRIPT_DIR=$(dirname "$0")
cp "$SCRIPT_DIR/../linters/indentconfig.yaml" ./.latexindent.yaml
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
is_docked=$(cat ~/.config/janishutz/docked)
if [ $is_docked == "y" ]; then
echo "n" >~/.config/janishutz/docked
else
echo "y" >~/.config/janishutz/docked
fi
sleep 1
hyprctl reload
echo "Switched to docked mode"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
cd ~/projects/system/nvim/
git pull
./nvim-install.sh
+238
View File
@@ -0,0 +1,238 @@
const fs = require('fs');
const path = require('path');
const { argv } = require('process');
const config = {
// replace character of key with value, any character, apart from ['.', '_', '-', ' ']
'replace': {
'ä': 'ae',
'ö': 'oe',
'ü': 'ue',
',': '-',
'&': 'And',
},
'rules': {
'underscore-before-and-after-number': true, // Will not do trailing or leading for filename
'enforce-leading-zero': true, // adds a leading zero to any number below 10
'camel-case-rules': {
'enforce-snake-case-for-filetypes': ['py'], // using underscores
'enforce-kebab-case-for-filetypes': ['css', 'html', 'scss', 'tex'], // using hyphens
},
'file-start-letter': 'lower', // lower, upper, unchanged
'directory-start-letter': 'upper', // lower, upper, unchanged
'replace-dots-with': '', // will not replace as leading character to not break dotfiles
}
}
/**
* Recursively find all files with extension in a directory
* @param {string} dir The directory to search. Either absolute or relative path
* @param {string} extension The file extension to look for
* @param {boolean} cleanup If helper files (like .DS_STORE and Windows helpers should be auto-deleted)
* @param {string[]} ignoreList A list of filenames or directories to ignore
* @returns {{ files: string, directories: string }} returns a list of html files with their full path
*/
const treeWalker = (dir, extension, cleanup, ignoreList) => {
const ls = fs.readdirSync(dir);
const fileList = [];
const dirList = [];
for (let file in ls) {
if (fs.statSync(path.join(dir, ls[file])).isDirectory()) {
// Filter ignored directories
if (ignoreList === undefined || !ignoreList.includes(ls[file])) {
const newData = treeWalker(path.join(dir, ls[file]), extension, ignoreList);
const newFiles = newData.files;
dirList.push( path.join( dir, ls[ file ] ) );
for (let dir = 0; dir < newData.directories.length; dir++) {
dirList.push( newData.directories[dir] );
}
for (let file = 0; file < newFiles.length; file++) {
fileList.push(newFiles[file]);
}
}
} else if (extension == '*' || ls[file].includes(extension)) {
if (ignoreList === undefined || !ignoreList.includes(ls[file])) {
fileList.push(path.join(dir, ls[file]));
}
}
}
return { 'files': fileList, 'directories': dirList };
}
/**
* @param {string} filename The filename to fix according to the rules
* @returns {string} the fixed filename
*/
const fixName = ( fn, ft ) => {
let out = '';
const enforceSnake = config.rules['camel-case-rules']['enforce-snake-case-for-filetypes'].includes( ft );
const enforceKebab = config.rules['camel-case-rules']['enforce-kebab-case-for-filetypes'].includes( ft );
const isDir = ft === 'directory';
const startLetter = isDir ? config.rules['directory-start-letter'] : config.rules['file-start-letter'];
let nextUpperCase = false;
for ( let i = 0; i < fn.length; i++ ) {
const c = fn[i];
if ( c == '.' ) {
// Rule: Removed after number, allowed elsewhere
if ( i > 0 && /[0-9]/.test( fn[ i - 1 ] ) ) {
out += config.rules[ 'replace-dots-with' ];
} else {
out += '.';
}
} else if ( /[A-Z]/.test( c ) ) {
// If we reach a capital letter and enforce either kebab-case or snake_case, we can assume that this is the start of a CamelCase word
if ( enforceKebab ) {
out += '-' + c.toLowerCase();
} else if ( enforceSnake ) {
out += '_' + c.toLowerCase();
} else {
nextUpperCase = false;
if ( i == 0 && startLetter === 'lower' ) {
out += c.toLowerCase();
} else {
out += c;
}
}
} else if ( c == ' ' ) {
// We always replace spaces, the question is just to what
if ( enforceKebab ) {
out += '-';
} else if ( enforceSnake ) {
out += '_';
} else {
nextUpperCase = true;
}
} else if ( c == '_' ) {
// If we are not enforcing snake_case, then replace it
if ( !enforceSnake ) {
if ( needsUnderscore( i, fn ) ) {
out += '_';
} else if ( enforceKebab ) {
out += '-';
} else {
nextUpperCase = true;
}
} else {
out += '_'
}
} else if ( c == '-' ) {
// If we are not enforcing kebab-case
if ( !enforceKebab ) {
if ( enforceSnake ) {
out += '_';
} else {
nextUpperCase = true;
}
} else {
out += '-'
}
} else {
let curr = config.replace[ c ] === undefined ? c : config.replace[ c ];
if ( config.rules[ 'underscore-before-and-after-number' ] || config.rules['enforce-leading-zero'] ) {
if ( /[0-9]/.test( c ) ) {
if ( i < fn.length - 1 ) {
if ( config.rules['enforce-leading-zero'] ) {
const prevIsNumber = i > 0 && /[0-9]/.test( fn[i - 1] );
const nextIsNumber = /[0-9]/.test( fn[i + 1] );
if ( !nextIsNumber && ( i == 0|| !prevIsNumber ) ) {
curr = '0' + curr;
}
}
if ( config.rules['underscore-before-and-after-number'] ) {
if ( !( /[0-9]/.test( fn[ i + 1 ] ) ) && fn[ i + 1 ] != '_' ) {
curr += '_';
}
}
} else {
if ( config.rules['enforce-leading-zero'] && ( i > 0 && !( /[0-9]/.test( fn[i - 1] ) ) ) ) {
curr = '0' + curr;
}
}
} else {
if ( config.rules['underscore-before-and-after-number'] && /[0-9]/.test( fn[ i + 1 ] ) ) {
curr += '_';
}
}
}
if ( nextUpperCase || ( i == 0 && startLetter === 'upper' ) ) {
nextUpperCase = false;
out += curr.toUpperCase();
} else {
if ( i == 0 && startLetter === 'upper' ) {
out += curr.toUpperCase();
} else {
out += curr.toLowerCase();
}
}
}
}
return out;
}
const needsUnderscore = ( i, fn ) => {
return ( i > 0 && /[0-9]/.test( fn[ i - 1 ] ) ) || ( i < fn - 1 && /[0-9]/.test( fn[ i + 1 ] ) )
}
const separateDirAndFileAndFiletype = ( filename ) => {
const loc = filename.lastIndexOf( '/' ) + 1;
let ftl = filename.lastIndexOf( '.' ) + 1;
let fn = filename.substring( loc, ftl - 1 );
let ft = filename.substring( ftl );
if ( fs.statSync( filename ).isDirectory() ) {
ftl = filename.length;
fn = filename.substring( loc );
ft = 'directory';
}
const dir = filename.slice( 0, loc - 1 );
return { 'filename': fn, 'dir': dir, 'filetype': ft };
}
const fixDirName = ( directory, top ) => {
if ( directory === top ) {
return top;
}
const f = separateDirAndFileAndFiletype( directory );
return fixDirName( f.dir, top ) + '/' + fixName( f.filename, f.filetype );
}
if (argv[2] == '-h') {
console.log('auto-renamer [directory]\n\n=> Recursively rename files in directory');
} else if (argv[2] == '-v') {
console.log('auto-renamer version 1.0.0, developed by Janis Hutz (development@janishutz.com)');
} else {
// Recursively add all files in the directory
const fp = path.resolve( argv[2] );
const list = treeWalker(fp, '*', ['.git', '@girs']);
const files = list.files;
const directories = list.directories;
for (let i = 0; i < files.length; i++) {
const file = files[i];
const f = separateDirAndFileAndFiletype( file );
let fixedFile = fixName( f.filename, f.filetype );
// Rename
const fixedPath = f.dir + '/' + fixedFile + '.' + f.filetype;
console.log( file + ' -> ' + fixedPath );
fs.renameSync( file, fixedPath );
}
// Fix directory names after file names. Sort array by decending length
directories.sort( ( a, b ) => {
return b.length - a.length;
} );
// separate directories up until we reach the path of dir started in
for (let i = 0; i < directories.length; i++) {
const dir = directories[i];
const fixed = fixDirName( dir, fp );
console.log( dir + ' -> ' + fixed );
fs.renameSync( dir, fixDirName( dir, fp ) );
}
}
Executable
+54
View File
@@ -0,0 +1,54 @@
#!/bin/sh
echo "
_ _ ( ) ( )_
(_) _ _ ___ (_) ___| |__ _ _| _)____
| |/ _ ) _ \ | __) _ \ ) ( ) | (_ )
| | (_| | ( ) | |__ \ | | | (_) | |_ / /_
_ | |\__ _)_) (_)_)____/_) (_)\___/ \__)____)
( )_| |
\___/
=> Migration to V4
-> WARNING: This will remove the old configurations from the system
"
if ! [[ -f ~/.config/janishutz/platform ]]; then
platform=""
read -p "Choose on the platform (l/D): " platform
mkdir ~/.config/janishutz
if [ $platform != "l" ]; then
platform="d"
fi
echo "$platform" >~/.config/janishutz/platform
echo "n" >~/.config/janishutz/docked
fi
confirmation=""
read -p "Also install the system-wide environment file? (y/N) " confirmation
if [[ "$confirmation" == "y" ]]; then
sudo cp ./system/environment /etc/environment
fi
rm -rf ~/.config/hypr/*.conf
rm ~/.config/platform
rm -rf ~/.config/rofi
rm -rf ~/.config/ags
rm -rf ~/.config/astal
cp -r ./config/* ~/.config
# Makes kitty use the DMS theme config
rm ~/.config/kitty/current-theme.conf
cp ./linters/indentconfig_import.yaml ~/.indentconfig.yaml
confirmation=""
read -p "Use repo version of DMS config? (y/N) " confirmation
if [[ "$confirmation" == "y" ]]; then
cp -r ./dms/* ~/.config/DankMaterialShell/
else
cp -r ~/.config/DankMaterialShell/settings.json ./dms
cp -r ~/.config/DankMaterialShell/plugin_settings.json ./dms
cp -r ~/.config/DankMaterialShell/.firstlaunch ./dms
fi
hyprctl reload
+4
View File
@@ -0,0 +1,4 @@
complete -a "base jupyter node php postgres python torch-rocm vue webserver" -c dev-containers -f
complete -a "rm" -d "Delete the container for this folder" -c dev-containers -f
complete -a "help" -d "Show help" -c dev-containers -f
complete -a "shell" -d "Create an extra shell for the currently running container" -c dev-containers -f
+18
View File
@@ -0,0 +1,18 @@
#
# This file is parsed by pam_env module
#
# Syntax: simple "KEY=VAL" pairs on separate lines
#
QT_QPA_PLATFORM=wayland
QT_QPA_PLATFORMTHEME=qt6ct
GCM_CREDENTIAL_STORE=secretservice
RADV_PERFTEST_RT=1
ANDROID_HOME=/home/janis/Android/Sdk
EDITOR=nvim
PAGER=nvimpager
MANPAGER=nvimpager
# GTK_THEME=Adaptive-Theme
# GTK_THEME=Material-Black-Blueberry
# QT_STYLE_OVERRIDE=kvantum
# VKD3D_CONFIG=dxr11,dxr
+13
View File
@@ -0,0 +1,13 @@
[terminal]
# The VT to run the greeter on. Can be "next", "current" or a number
# designating the VT.
vt = 1
# The default session, also known as the greeter.
[default_session]
command = "tuigreet --cmd Hyprland --time --remember --remember-user-session --asterisks --user-menu --sessions /usr/share/wayland-sessions"
# The user to run the command as. The privileges this user must have depends
# on the greeter. A graphical greeter may for example require the user to be
# in the `video` group.
user = "greeter"
Loaded 100 of 105 files, more files were not shown because too many files have changed in this diff. Show more