44 Commits

Author SHA1 Message Date
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
103 changed files with 3447 additions and 1619 deletions
+2 -13
View File
@@ -11,19 +11,7 @@ For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
## Features ## Features
- QuickShell-based status bar and QuickActions menu (Coming soon) - DankMaterialShell
- 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
- Automatically generated GTK Theme and theming of the rest of the desktop using `matugen` - 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) - Fish config (with some handy aliases, based on one from ohh-my-fish)
- Fastfetch config - Fastfetch config
@@ -33,6 +21,7 @@ For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
- mpv config - mpv config
- zathura configs - zathura configs
- yazi configs with links to various directories I use commonly plus a few plugins and themes that are applied by the script - yazi configs with links to various directories I use commonly plus a few plugins and themes that are applied by the script
- Custom QuickShell-based status bar and QuickActions menu (Postponed until further notice)
## TODOs ## TODOs
+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_theme = {
grub_os_prober = True "desktop": "/usr/share/grub/themes/monterey-grub-theme/theme.txt",
kernel_args_all = "" "laptop": "/usr/share/grub/themes/monterey-grub-theme/theme.txt",
kernel_args_debug_only = "" }
kernel_args_normal_only = "" 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"
+13 -11
View File
@@ -7,7 +7,6 @@ alias cv='clear && nvim'
alias zs='zathura-sandbox' alias zs='zathura-sandbox'
alias z='zathura' alias z='zathura'
alias bt='bashtop' alias bt='bashtop'
alias vicfg='nvim ~/projects/nvim/'
alias fm='thunar .' alias fm='thunar .'
alias gl='git ls-files --others --exclude-standard' alias gl='git ls-files --others --exclude-standard'
alias gm='git ls-files -m' alias gm='git ls-files -m'
@@ -16,23 +15,20 @@ alias gp='git pull'
alias gpr='git pull --rebase' alias gpr='git pull --rebase'
alias gc='git commit -a -m' alias gc='git commit -a -m'
alias ga='git add ./*' alias ga='git add ./*'
alias cfh='nvim ~/projects/dotfiles/config/hypr/' alias cfh='nvim ~/projects/system/dotfiles/config/hypr/'
alias cfn='nvim ~/projects/nvim/' alias cfn='nvim ~/projects/system/nvim/'
alias cff='nvim ~/projects/dotfiles/config/fish/' alias cff='nvim ~/projects/system/dotfiles/config/fish/'
alias cfa='nvim ~/projects/dotfiles/config/astal/' alias cfa='nvim ~/projects/system/dotfiles/config/astal/'
alias cf='nvim ~/projects/dotfiles/' alias cf='nvim ~/projects/system/dotfiles/'
alias g='lazygit' alias g='lazygit'
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
alias ai='ollama serve'
alias ff='fastfetch' alias ff='fastfetch'
alias p='nvimpager -p' alias p='nvimpager -p'
alias latexdocs='zathura ~/projects/latex/docs/docs.pdf &>> /dev/null & disown' alias latexdocs='zathura ~/projects/latex/docs/docs.pdf &>> /dev/null & disown'
alias gccerr='gcc -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes -std=c99' alias gccerr='gcc -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes -std=c99'
alias linecount='cloc --vcs git .' alias linecount='cloc --vcs git .'
alias flutter='fvm flutter'
# Add scripts in ~/projects/dotfiles/scripts/ to path # Add custom scripts to path
fish_add_path -P ~/projects/dotfiles/scripts/ fish_add_path -P ~/projects/system/dotfiles/scripts/
function y function y
set tmp (mktemp -t "yazi-cwd.XXXXXX") set tmp (mktemp -t "yazi-cwd.XXXXXX")
@@ -133,3 +129,9 @@ end
end end
set -g fish_greeting "" 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 -- 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 is_docked = false
local laptop_config = false local laptop_config = false
local read_platform = pcall(function() local read_platform = trim_string(io.popen("cat ~/.config/janishutz/platform"):read("a")) == "l"
io.popen("cat ~/.config/janishutz/platform-laptop") local read_docked = trim_string(io.popen("cat ~/.config/janishutz/docked"):read("a")) == "y"
end)
local read_docked = pcall(function()
io.popen("cat ~/.config/janishutz/docked")
end)
if read_platform then if read_platform then
laptop_config = true laptop_config = true
end end
if read_docked then if read_docked and laptop_config then
laptop_config = true 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 end
-- Core -- Core
require("colors") require("hyprland.colors")
require("hyprland.core.general") 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.group")
require("hyprland.core.misc") require("hyprland.core.misc")
require("hyprland.core.style") require("hyprland.core.style")
-- Binds -- Binds
require("hyprland.binds.device")(laptop_config) require("hyprland.binds.main")
require("hyprland.binds.device")
require("hyprland.binds.groups") require("hyprland.binds.groups")
require("hyprland.binds.launch") require("hyprland.binds.launch")
require("hyprland.binds.main") require("hyprland.binds.group-launch")
require("hyprland.binds.notifications") require("hyprland.binds.notifications")
require("hyprland.binds.screenshot") require("hyprland.binds.screenshot")
require("hyprland.binds.window") require("hyprland.binds.window")
@@ -40,15 +52,15 @@ require("hyprland.windowrules.tags")
require("hyprland.windowrules.workspaces") require("hyprland.windowrules.workspaces")
-- Workspace rules -- Workspace rules
require("hyprland.workspacerules.main") require("hyprland.workspacerules.main")(laptop_config, is_docked)
-- Monitors -- Monitors
require("hyprland.monitors")(laptop_config, is_docked) require("hyprland.monitors")(laptop_config, is_docked)
-- Execs -- Execs
require("hyprland.execs") require("hyprland.execs")(laptop_config)
hl.device({ hl.device({
name = "pnp0c50:00-093a:0255-touchpad", name = "pnp0c50:00-093a:0255-touchpad",
enabled = true, enabled = true,
}) })
+57 -49
View File
@@ -1,50 +1,58 @@
return function(is_laptop) local function exit_submap()
local function exit_submap() hl.dispatch(hl.dsp.submap("reset"))
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)
end end
-- TODO: Update this for laptop
hl.bind("code:232", hl.dsp.exec_cmd("brightnessctl -S"))
-- 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"))
hl.bind("code:122", hl.dsp.exec_cmd("pamixer -d 5"))
hl.bind("code:121", hl.dsp.exec_cmd("pamixer t"))
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)
-- 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)
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)
-- ── DMS controls ─────────────────────────────────────────────────
-- clipboard history
hl.bind("h", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call clipboard toggle"))
exit_submap()
end)
-- Dash
hl.bind("d", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call dash toggle"))
exit_submap()
end)
-- Settings
hl.bind("s", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call settings toggle"))
exit_submap()
end)
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)
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)
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)
hl.bind("Escape", function()
exit_submap()
end)
end)
+5 -5
View File
@@ -2,8 +2,8 @@ local function exit_submap()
hl.dispatch(hl.dsp.submap("reset")) hl.dispatch(hl.dsp.submap("reset"))
end end
hl.bind("Super + Q", hl.dsp.exit()) -- TODO: Improve mapping (also global mapping, for moving between els if to use regularly)
-- Improve colours
hl.define_submap("groups", function() hl.define_submap("groups", function()
hl.bind("c", function() hl.bind("c", function()
hl.dispatch(hl.dsp.group.toggle()) hl.dispatch(hl.dsp.group.toggle())
@@ -20,18 +20,18 @@ hl.define_submap("groups", function()
exit_submap() exit_submap()
end) end)
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.exec_cmd("notify-send 'Group locking toggled' --app-name='Hyprtclt'"))
hl.dispatch(hl.dsp.group.lock_active()) hl.dispatch(hl.dsp.group.lock_active())
exit_submap() exit_submap()
end) end)
hl.bind("Shift + L", function() hl.bind("SHIFT + L", function()
hl.dispatch(hl.dsp.window.move({ into_or_create_group = "r" })) hl.dispatch(hl.dsp.window.move({ into_or_create_group = "r" }))
exit_submap() exit_submap()
end) end)
hl.bind("Shift + H", function() hl.bind("SHIFT + H", function()
hl.dispatch(hl.dsp.window.move({ into_or_create_group = "l" })) hl.dispatch(hl.dsp.window.move({ into_or_create_group = "l" }))
exit_submap() exit_submap()
end) end)
+4 -2
View File
@@ -9,6 +9,8 @@ local function launcher(program)
end end
end end
hl.bind("SUPER + Return", launcher("kitty"))
hl.define_submap("launch", function() hl.define_submap("launch", function()
-- Librewolf -- Librewolf
hl.bind("l", launcher("librewolf")) hl.bind("l", launcher("librewolf"))
@@ -33,10 +35,10 @@ hl.define_submap("launch", function()
hl.bind("z", launcher("zathura")) hl.bind("z", launcher("zathura"))
-- Brave -- Brave
hl.bind("Shift + B", launcher("brave")) hl.bind("SHIFT + B", launcher("brave"))
-- bsmanager -- bsmanager
hl.bind("b", launcher("/opt/bs-manager/bs-manager")) hl.bind("b", launcher("/opt/BSManager/bs-manager"))
-- ALVR -- ALVR
hl.bind("p", launcher("alvr_dashboard")) hl.bind("p", launcher("alvr_dashboard"))
+14 -9
View File
@@ -1,9 +1,14 @@
hl.bind("Super + X", hl.dsp.submap("launch")) hl.bind("SUPER + X", hl.dsp.submap("launch"))
hl.bind("Super + D", hl.dsp.submap("device")) hl.bind("SUPER + D", hl.dsp.submap("device"))
hl.bind("Super + C", hl.dsp.submap("notifications")) hl.bind("SUPER + C", hl.dsp.submap("notifications"))
hl.bind("Super + G", hl.dsp.submap("groups")) hl.bind("SUPER + G", hl.dsp.submap("groups"))
hl.bind("Super + S", hl.dsp.submap("screenshot")) hl.bind("SUPER + S", hl.dsp.submap("screenshot"))
hl.bind("Super + W", hl.dsp.submap("window")) hl.bind("SUPER + W", hl.dsp.submap("window"))
hl.bind("Super + A", hl.dsp.submap("workspace")) hl.bind("SUPER + A", hl.dsp.submap("workspace"))
hl.bind("Super + Space", hl.dsp.exec_cmd("hyprlauncher")) hl.bind("SUPER + Q", hl.dsp.window.close())
hl.bind("Super + Escape", hl.dsp.exec_cmd("wlogout")) hl.bind("SUPER + P", hl.dsp.submap("groupedlaunch"))
hl.bind("SUPER + Space", hl.dsp.exec_cmd("dms ipc call spotlight toggle"))
hl.bind("SUPER + Escape", hl.dsp.exec_cmd("wlogout"))
hl.bind("SUPER + I", hl.dsp.exec_cmd("dms ipc call control-center open"))
hl.bind("SUPER + CTRL + H", hl.dsp.exec_cmd("dms ipc call keybinds toggle hyprland"))
+10 -5
View File
@@ -4,27 +4,32 @@ end
hl.define_submap("notifications", function() hl.define_submap("notifications", function()
hl.bind("c", 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() exit_submap()
end) end)
hl.bind("d", function() 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)
hl.bind("m", function()
hl.dispatch(hl.dsp.exec_cmd("dms ipc call notifications toggleDoNotDisturb"))
exit_submap() exit_submap()
end) end)
hl.bind("h", function() 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() exit_submap()
end) end)
hl.bind("s", function() 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() exit_submap()
end) end)
hl.bind("t", function() 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() exit_submap()
end) end)
+9 -9
View File
@@ -4,32 +4,32 @@ end
hl.define_submap("screenshot", function() hl.define_submap("screenshot", function()
hl.bind("y", 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() exit_submap()
end) end)
hl.bind("c", function() hl.bind("c", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copysave area")) hl.dispatch(hl.dsp.exec_cmd("dms screenshot"))
exit_submap() exit_submap()
end) end)
hl.bind("s", function() 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() exit_submap()
end) end)
hl.bind("Shift + y", function() hl.bind("SHIFT + y", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copy screen")) hl.dispatch(hl.dsp.exec_cmd("dms screenshot full --no-file"))
exit_submap() exit_submap()
end) end)
hl.bind("Shift + c", function() hl.bind("SHIFT + c", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify copysave screen")) hl.dispatch(hl.dsp.exec_cmd("dms screenshot full"))
exit_submap() exit_submap()
end) end)
hl.bind("Shift + s", function() hl.bind("SHIFT + s", function()
hl.dispatch(hl.dsp.exec_cmd("grimblast --notify save screen")) hl.dispatch(hl.dsp.exec_cmd("dms screenshot full --no-clipboard"))
exit_submap() exit_submap()
end) end)
+16 -5
View File
@@ -2,40 +2,51 @@ local function exit_submap()
hl.dispatch(hl.dsp.submap("reset")) hl.dispatch(hl.dsp.submap("reset"))
end 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() hl.define_submap("window", function()
-- Close window
hl.bind("x", function() hl.bind("x", function()
hl.dispatch(hl.dsp.exit()) hl.dispatch(hl.dsp.window.close())
exit_submap() exit_submap()
end) end)
hl.bind("q", function() hl.bind("q", function()
hl.dispatch(hl.dsp.exit()) hl.dispatch(hl.dsp.window.close())
exit_submap() exit_submap()
end) end)
-- Fullscreen
hl.bind("f", function() hl.bind("f", function()
hl.dispatch(hl.dsp.window.fullscreen({ mode = "fullscreen" })) hl.dispatch(hl.dsp.window.fullscreen({ mode = "fullscreen" }))
exit_submap() exit_submap()
end) end)
-- Floating
hl.bind("v", function() hl.bind("v", function()
hl.dispatch(hl.dsp.window.float()) hl.dispatch(hl.dsp.window.float())
exit_submap() exit_submap()
end) end)
-- Center
hl.bind("c", function() hl.bind("c", function()
hl.dispatch(hl.dsp.window.center()) hl.dispatch(hl.dsp.window.center())
exit_submap() exit_submap()
end) end)
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("notify-send 'Insta-Kill activated' --app-name='Hyprtclt'"))
hl.dispatch(hl.dsp.exec_cmd("hyprctl kill")) hl.dispatch(hl.dsp.exec_cmd("hyprctl kill"))
exit_submap() exit_submap()
end) end)
-- Resize
hl.bind("l", hl.dsp.window.resize({ x = 10, y = 0 }))
hl.bind("h", hl.dsp.window.resize({ x = -10, y = 0 }))
hl.bind("j", hl.dsp.window.resize({ x = 0, y = 10 }))
hl.bind("k", hl.dsp.window.resize({ x = 0, y = -10 }))
hl.bind("Escape", function() hl.bind("Escape", function()
exit_submap() exit_submap()
end) end)
+13 -13
View File
@@ -3,22 +3,22 @@ local function exit_submap()
end end
for i = 1, 10, 1 do for i = 1, 10, 1 do
hl.bind("Super + " .. tostring(i % 10), hl.dsp.focus({ workspace = tostring(i) })) 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 })) hl.bind("SUPER + SHIFT + " .. tostring(i % 10), hl.dsp.window.move({ workspace = tostring(i), follow = 1 }))
end end
hl.bind("Super + h", hl.dsp.focus({ direction = "l" })) hl.bind("SUPER + h", hl.dsp.focus({ direction = "l" }))
hl.bind("Super + l", hl.dsp.focus({ direction = "r" })) hl.bind("SUPER + l", hl.dsp.focus({ direction = "r" }))
hl.bind("Super + j", hl.dsp.focus({ direction = "d" })) hl.bind("SUPER + j", hl.dsp.focus({ direction = "d" }))
hl.bind("Super + k", hl.dsp.focus({ direction = "u" })) hl.bind("SUPER + k", hl.dsp.focus({ direction = "u" }))
hl.bind("Super + M", hl.dsp.workspace.toggle_special("main")) 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 + SHIFT + M", hl.dsp.window.move({ workspace = "special:main" }))
hl.define_submap("notifications", function() hl.define_submap("workspace", function()
for i = 1, 10, 1 do for i = 1, 10, 1 do
hl.bind(tostring(i % 10), hl.dsp.focus({ workspace = tostring(i) })) 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 })) hl.bind("SHIFT + " .. tostring(i % 10), hl.dsp.window.move({ workspace = tostring(i), follow = 1 }))
end end
hl.bind("h", hl.dsp.focus({ direction = "l" })) hl.bind("h", hl.dsp.focus({ direction = "l" }))
@@ -26,11 +26,11 @@ hl.define_submap("notifications", function()
hl.bind("j", hl.dsp.focus({ direction = "d" })) hl.bind("j", hl.dsp.focus({ direction = "d" }))
hl.bind("k", hl.dsp.focus({ direction = "u" })) hl.bind("k", hl.dsp.focus({ direction = "u" }))
hl.bind("Shift + l", hl.dsp.window.move({ workspace = "+1", follow = 1 })) 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 + h", hl.dsp.window.move({ workspace = "-1", follow = 1 }))
hl.bind("M", hl.dsp.workspace.toggle_special("main")) hl.bind("M", hl.dsp.workspace.toggle_special("main"))
hl.bind("Shift + M", hl.dsp.window.move({ workspace = "special:main" })) hl.bind("SHIFT + M", hl.dsp.window.move({ workspace = "special:main" }))
hl.bind("Escape", function() hl.bind("Escape", function()
exit_submap() exit_submap()
+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 --- @param laptop_config boolean
return function(swap_escape) return function(laptop_config)
hl.config({ hl.config({
inputs = { input = {
kb_options = swap_escape and "caps:swapescape" or "", kb_options = laptop_config and "caps:swapescape" or "",
kb_layout = "us", kb_layout = "us",
kb_variant = "altgr-intl", kb_variant = "altgr-intl",
natural_scroll = "true", natural_scroll = true,
numlock_by_default = true, numlock_by_default = true,
repeat_delay = 400, repeat_delay = 400,
follow_mouse = 2, follow_mouse = 2,
mouse_refocus = true, mouse_refocus = true,
scroll_factor = 2, scroll_factor = 2,
accel_profile = "flat", accel_profile = "flat",
touchpad = { touchpad = {
disable_while_typing = true, disable_while_typing = true,
natural_scroll = true, natural_scroll = true,
scroll_factor = 4, scroll_factor = 4,
}, },
focus_on_close = 1, focus_on_close = true,
sensitivity = 0, sensitivity = 0,
}, },
gestures = { gestures = {
workspace_swipe_distance = 200, workspace_swipe_distance = 200,
workspace_swipe_cancel_ratio = 0.3, workspace_swipe_cancel_ratio = 0.3,
workspace_swipe_forever = true, workspace_swipe_forever = true,
workspace_swipe_direction_lock = false, workspace_swipe_direction_lock = false,
}, },
}) })
hl.gesture({ hl.gesture({
fingers = 3, fingers = 3,
direction = "horizontal", direction = "horizontal",
action = "workspace", action = "workspace",
}) })
hl.gesture({ hl.gesture({
fingers = 3, fingers = 3,
direction = "down", direction = "down",
action = "close", action = "close",
}) })
hl.gesture({ hl.gesture({
fingers = 3, fingers = 3,
direction = "up", direction = "up",
action = "fullscreen", action = "fullscreen",
}) })
end end
-1
View File
@@ -9,7 +9,6 @@ hl.config({
allow_session_lock_restore = true, allow_session_lock_restore = true,
}, },
dwindle = { dwindle = {
pseudotile = true,
force_split = 2, force_split = 2,
preserve_split = true, preserve_split = true,
}, },
+6 -2
View File
@@ -31,7 +31,7 @@ hl.curve("main-bezier", {
}) })
hl.animation({ hl.animation({
leaf = "windowsIn", leaf = "windows",
enabled = true, enabled = true,
bezier = "main-bezier", bezier = "main-bezier",
speed = 3, speed = 3,
@@ -48,23 +48,27 @@ hl.animation({
hl.animation({ hl.animation({
leaf = "border", leaf = "border",
enabled = true, enabled = true,
bezier = "default",
speed = 8, speed = 8,
}) })
hl.animation({ hl.animation({
leaf = "fade", leaf = "fade",
enabled = true, enabled = true,
bezier = "default",
speed = 3, speed = 3,
}) })
hl.animation({ hl.animation({
leaf = "workspace", leaf = "workspaces",
enabled = true, enabled = true,
bezier = "default",
speed = 1, speed = 1,
}) })
hl.animation({ hl.animation({
leaf = "specialWorkspace", leaf = "specialWorkspace",
enabled = true, enabled = true,
bezier = "default",
speed = 1, speed = 1,
}) })
+28 -14
View File
@@ -1,14 +1,28 @@
hl.on("hyprland.start", function() return function(is_laptop)
-- hl.exec_cmd("~/.config/hypr/xdg-portal-hyprland") hl.env("QT_QPA_PLATFORM", "wayland")
-- hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY") hl.env("QT_QPA_PLATFORM_THEME", "qt6ct")
-- hl.exec_cmd("systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
hl.exec_cmd("systemctl --user start hyprpolkitagent") hl.on("hyprland.start", function()
hl.exec_cmd("hypridle") -- Portal fixes
hl.exec_cmd("hyprpaper") hl.exec_cmd("~/.config/hypr/xdg-portal-hyprland")
hl.exec_cmd("hyprlauncher -d")
hl.exec_cmd("nm-applet") -- Environment setup
hl.exec_cmd("nextcloud --background") hl.exec_cmd(
hl.exec_cmd("quickshell") "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY"
hl.exec_cmd("matugen") )
hl.exec_cmd("wl-paste --type text --watch cliphist store") hl.exec_cmd("systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
end) 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) return function(is_laptop, is_docked)
if is_laptop then if is_laptop then
hl.monitor({ hl.monitor({
output = "", output = "",
mode = "preferred", mode = "preferred",
position = "auto", position = "auto",
scale = 1, scale = 1,
}) })
if is_docked then if is_docked then
hl.monitor({ hl.monitor({
output = "eDP-1", output = "eDP-1",
disabled = true, disabled = true,
}) })
else hl.monitor({
hl.monitor({ output = "DP-1",
output = "eDP-1", mode = "1920x1080@144",
mode = "2880x1800@240", position = "0x0",
position = "0x0", scale = 1,
scale = 1.5, })
}) else
end hl.monitor({
elseif is_laptop and is_docked then output = "eDP-1",
hl.monitor({ mode = "2880x1800@240",
output = "DP-1", position = "0x0",
mode = "1920x1080@144", scale = 1.5,
position = "0x0", })
scale = 1, end
}) else
else hl.monitor({
hl.monitor({ output = "DP-1",
output = "DP-1", mode = "1920x1080@144",
mode = "1920x1080@144", position = "0x0",
position = "0x0", scale = 1,
scale = 1, vrr = 2,
vrr = 2 })
}) hl.monitor({
hl.monitor({ output = "DP-2",
output = "DP-2", mode = "1920x1080@75",
mode = "1920x1080@75", position = "1920x0",
position = "1920x0", scale = 1,
scale = 1, })
}) end
end
end end
@@ -23,12 +23,6 @@ hl.window_rule({
}, },
fullscreen = true, fullscreen = true,
}) })
hl.window_rule({
match = {
class = "wlogout",
},
fullscreen = true,
})
-- Termfilechooser -- Termfilechooser
hl.window_rule({ 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 -- Games
hl.window_rule({ hl.window_rule({
match = { match = {
class = "steam_app", class = "steam_app.*",
}, },
tag = "+game", tag = "+game",
}) })
hl.window_rule({ hl.window_rule({
match = { match = {
title = "Minecraft|Beat Saber", title = "Minecraft.*|Beat Saber",
}, },
tag = "+game", tag = "+game",
}) })
-- Launchers -- Launchers
hl.window_rule({ hl.window_rule({
match = { match = {
class = "steam|minecraft-launcher|org\\.prismlauncher\\.PrismLauncher", class = "steam|minecraft-launcher|org\\.prismlauncher\\.PrismLauncher",
}, },
tag = "+launchers", tag = "+launchers",
}) })
-- Dialogs -- Dialogs
hl.window_rule({ hl.window_rule({
match = { match = {
class = "file_progress|confirm|dialog|download|notification|error|splash|confirmreset|lxappearance|pavucontrol|file-roller", class = "file_progress|confirm|dialog|download|notification|error|splash|confirmreset|lxappearance|pavucontrol|file-roller",
}, },
tag = "+dialog", tag = "+dialog",
}) })
hl.window_rule({ hl.window_rule({
match = { match = {
class = "SteamVR Status|Open File|Media viewer|Volume Control|Picture-in-Picture|File Operation Progress|Loading|AG Controller|AG Controller|Qalculate", title = ".*SteamVR.*|Open File.*|Media viewer|Volume Control|Picture-in-Picture|File Operation Progress|Loading.*|AG Controller|.*Qalculate.*",
}, },
tag = "+dialog", tag = "+dialog",
}) })
@@ -7,31 +7,27 @@ hl.window_rule({
workspace = 1, workspace = 1,
}) })
hl.window_rule({ hl.window_rule({
match = { title = "ALVR|^hidden-terminator$" }, match = { title = "ALVR.*|^hidden-terminator$" },
workspace = 1, workspace = 1,
}) })
-- Workspace 2 -- Workspace 2
hl.window_rule({ hl.window_rule({
match = { class = "evince|okular|org\\.pwmt\\.zathura|librewolf" }, match = { class = "evince|okular|org\\.pwmt\\.zathura|librewolf|vesktop" },
workspace = 2, workspace = 2,
}) })
hl.window_rule({ hl.window_rule({
match = { title = "BSManager" }, match = { title = ".*BSManager.*" },
workspace = 2, workspace = 2,
}) })
-- Workspace 3 -- Workspace 3
hl.window_rule({ hl.window_rule({
match = { class = "minecraft-launcher" }, match = { tag = "launchers" },
workspace = 3,
})
hl.window_rule({
match = { title = "[Ss]team" },
workspace = 3, workspace = 3,
}) })
hl.window_rule({ hl.window_rule({
match = { title = "Qalculate|AG Controller" }, match = { title = "Qalculate.*|AG Controller" },
workspace = "special", workspace = "special",
}) })
+35 -20
View File
@@ -1,20 +1,35 @@
hl.workspace_rule({ return function(is_laptop, is_docked)
workspace = "1", hl.workspace_rule({
monitor = "DP-1", workspace = "1",
default = true, monitor = "DP-1",
}) default = true,
hl.workspace_rule({ })
workspace = "2", hl.workspace_rule({
monitor = "DP-2", workspace = "3",
default = true, monitor = "DP-1",
}) default = false,
hl.workspace_rule({ })
workspace = "3", if not is_laptop then
monitor = "DP-1", hl.workspace_rule({
default = true, workspace = "2",
}) monitor = "DP-2",
hl.workspace_rule({ default = true,
workspace = "4", })
monitor = "DP-2", hl.workspace_rule({
default = true, workspace = "4",
}) 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,
})
end
end
+7 -6
View File
@@ -12,9 +12,10 @@
# ┌ ┐ # ┌ ┐
# │ BACKGROUND │ # │ BACKGROUND │
# └ ┘ # └ ┘
source = ./hyprlock-colors.conf
background { background {
monitor = monitor =
path = /home/janis/NextCloud/Wallpapers/nvim/nvim-simple.png # Or screenshot path = $background_image # Or screenshot
blur_passes = 1 blur_passes = 1
} }
@@ -29,9 +30,9 @@ input-field {
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8 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_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = false dots_center = false
outer_color = rgb(92, 155, 63) outer_color = $entry_border_color
inner_color = rgb(200, 200, 200) inner_color = $entry_background_color
font_color = rgb(10, 10, 10) font_color = $entry_color
fade_on_empty = true fade_on_empty = true
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty. placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
hide_input = false hide_input = false
@@ -56,7 +57,7 @@ label {
label { label {
monitor = monitor =
text = $LAYOUT text = $LAYOUT
color = rgba(200, 200, 200, 1.0) color = $text_color
font_size = 12 font_size = 12
font_family = Comfortaa font_family = Comfortaa
@@ -68,7 +69,7 @@ label {
label { label {
monitor = monitor =
text = $USER text = $USER
color = rgba(200, 200, 200, 1.0) color = $text_color
font_size = 12 font_size = 12
font_family = Comfortaa font_family = Comfortaa
+2
View File
@@ -3,6 +3,8 @@
# │ Kitty Config │ # │ Kitty Config │
# ╰────────────────────────────────────────────────╯ # ╰────────────────────────────────────────────────╯
# ──────────────────────────────────────────────────────────────────── # ────────────────────────────────────────────────────────────────────
include dank-tabs.conf
include dank-theme.conf
# ┌ ┐ # ┌ ┐
+5 -13
View File
@@ -1,26 +1,18 @@
[config] [config]
version_check = false version_check = false
[templates.m3colors]
input_path = '~/.config/matugen/templates/colors.json'
output_path = '~/.local/state/quickshell/user/generated/colors.json'
[templates.hyprland] [templates.hyprland]
input_path = '~/.config/matugen/templates/hyprland/colors.lua' input_path = '~/.config/matugen/templates/hyprland/colors.lua'
output_path = '~/.config/hypr/hyprland/colors.lua' output_path = '~/.config/hypr/hyprland/colors.lua'
[templates.hyprlock] [templates.hyprlock]
input_path = '~/.config/matugen/templates/hyprland/hyprlock-colors.conf' input_path = '~/.config/matugen/templates/hyprland/hyprlock-colors.conf'
output_path = '~/.config/hypr/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'
[templates.wlogout] [templates.wlogout]
input_path = '~/.config/matugen/templates/wlogout/style.css' input_path = '~/.config/matugen/templates/wlogout/style.css'
output_path = '~/.config/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({ hl.config({
general = { general = {
col = { 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)", inactive_border = "rgba({{colors.surface_container_low.default.hex_stripped}}33)",
}, },
}, },
group = { group = {
col = { col = {
active_border = "rgba({{colors.outline_variant.default.hex_stripped}}77)", border_active = "rgba({{colors.secondary.default.hex_stripped}}cc)",
inactive_border = "rgba({{colors.surface_container_high.default.hex_stripped}}33)", 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 = { decoration = {
shadow = { shadow = {
color = "rgba({{colors.shadow.default.hex_stripped}}20)", 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-family: monospace;
font-size: 14pt; font-size: 14pt;
color: {{colors.on_background.default.hex}}; /* text */ 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 { button {
@@ -23,10 +23,11 @@ button {
button:hover { button:hover {
background-color: {{colors.primary.default.hex}}; background-color: {{colors.primary.default.hex}};
color: {{colors.on_primary.default.hex}};
} }
button:focus { 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}}; 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("/");
}
}
-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"));
}
+76
View File
@@ -0,0 +1,76 @@
{
"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"
}
],
"fontSize": "none"
},
"calculator": {
"enabled": true,
"trigger": "=",
"calcEngine": "qalc",
"noTrigger": false
}
}
+610
View File
@@ -0,0 +1,610 @@
{
"currentThemeName": "dynamic",
"currentThemeCategory": "dynamic",
"customThemeFile": "",
"registryThemeVariants": {},
"matugenScheme": "scheme-content",
"runUserMatugenTemplates": true,
"matugenTargetMonitor": "",
"popupTransparency": 1,
"dockTransparency": 1,
"widgetBackgroundColor": "sch",
"widgetColorMode": "colorful",
"controlCenterTileColorMode": "primary",
"buttonColorMode": "primary",
"cornerRadius": 12,
"niriLayoutGapsOverride": -1,
"niriLayoutRadiusOverride": -1,
"niriLayoutBorderSize": -1,
"hyprlandLayoutGapsOverride": -1,
"hyprlandLayoutRadiusOverride": -1,
"hyprlandLayoutBorderSize": -1,
"mangoLayoutGapsOverride": -1,
"mangoLayoutRadiusOverride": -1,
"mangoLayoutBorderSize": -1,
"use24HourClock": true,
"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,
"blurEnabled": false,
"blurForegroundLayers": true,
"blurLayerOutlineOpacity": 0.12,
"blurBorderColor": "outline",
"blurBorderCustomColor": "#ffffff",
"blurBorderOpacity": 0.35,
"wallpaperFillMode": "Fill",
"blurredWallpaperLayer": false,
"blurWallpaperOnOverview": false,
"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,
"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,
"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,
"workspaceFollowFocus": true,
"showOccupiedWorkspacesOnly": false,
"reverseScrolling": false,
"dwlShowAllTags": false,
"workspaceColorMode": "default",
"workspaceOccupiedColorMode": "none",
"workspaceUnfocusedColorMode": "default",
"workspaceUrgentColorMode": "default",
"workspaceFocusedBorderEnabled": false,
"workspaceFocusedBorderColor": "primary",
"workspaceFocusedBorderThickness": 2,
"workspaceNameIcons": {},
"waveProgressEnabled": true,
"scrollTitleEnabled": true,
"audioVisualizerEnabled": true,
"audioScrollMode": "volume",
"audioWheelScrollAmount": 5,
"clockCompactMode": false,
"focusedWindowCompactMode": false,
"runningAppsCompactMode": true,
"barMaxVisibleApps": 0,
"barMaxVisibleRunningApps": 0,
"barShowOverflowBadge": true,
"appsDockHideIndicators": false,
"appsDockColorizeActive": false,
"appsDockActiveColorMode": "primary",
"appsDockEnlargeOnHover": false,
"appsDockEnlargePercentage": 125,
"appsDockIconSizePercentage": 100,
"keyboardLayoutNameCompactMode": false,
"runningAppsCurrentWorkspace": true,
"runningAppsGroupByApp": false,
"runningAppsCurrentMonitor": false,
"appIdSubstitutions": [],
"centeringMode": "index",
"clockDateFormat": "",
"lockDateFormat": "",
"greeterRememberLastSession": true,
"greeterRememberLastUser": true,
"greeterEnableFprint": false,
"greeterEnableU2f": false,
"greeterWallpaperPath": "",
"mediaSize": 1,
"appLauncherViewMode": "list",
"spotlightModalViewMode": "list",
"browserPickerViewMode": "grid",
"browserUsageHistory": {},
"appPickerViewMode": "grid",
"filePickerUsageHistory": {},
"sortAppsAlphabetically": false,
"appLauncherGridColumns": 4,
"spotlightCloseNiriOverview": true,
"spotlightSectionViewModes": {},
"appDrawerSectionViewModes": {},
"niriOverviewOverlayEnabled": true,
"dankLauncherV2Size": "compact",
"dankLauncherV2BorderEnabled": false,
"dankLauncherV2BorderThickness": 2,
"dankLauncherV2BorderColor": "primary",
"dankLauncherV2ShowFooter": true,
"dankLauncherV2UnloadOnClose": false,
"useAutoLocation": false,
"weatherEnabled": true,
"networkPreference": "wifi",
"iconTheme": "Papirus-Dark",
"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,
"notepadUseMonospace": true,
"notepadFontFamily": "",
"notepadFontSize": 14,
"notepadShowLineNumbers": false,
"notepadTransparencyOverride": -1,
"notepadLastCustomTransparency": 0.7,
"soundsEnabled": true,
"useSystemSoundTheme": false,
"soundNewNotification": false,
"soundVolumeChanged": false,
"soundPluggedIn": false,
"acMonitorTimeout": 0,
"acLockTimeout": 0,
"acSuspendTimeout": 0,
"acSuspendBehavior": 0,
"acProfileName": "",
"batteryMonitorTimeout": 0,
"batteryLockTimeout": 0,
"batterySuspendTimeout": 0,
"batterySuspendBehavior": 0,
"batteryProfileName": "",
"batteryChargeLimit": 100,
"lockBeforeSuspend": false,
"loginctlLockIntegration": true,
"fadeToLockEnabled": true,
"fadeToLockGracePeriod": 5,
"fadeToDpmsEnabled": true,
"fadeToDpmsGracePeriod": 5,
"launchPrefix": "",
"brightnessDevicePins": {},
"wifiNetworkPins": {
"preferredWifi": [
"mchp"
]
},
"bluetoothDevicePins": {
"preferredDevice": [
"ED:A8:60:08:93:6C"
]
},
"audioInputDevicePins": {},
"audioOutputDevicePins": {},
"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,
"matugenTemplateEquibop": false,
"matugenTemplateGhostty": false,
"matugenTemplateKitty": true,
"matugenTemplateFoot": false,
"matugenTemplateAlacritty": false,
"matugenTemplateNeovim": true,
"matugenTemplateWezterm": false,
"matugenTemplateDgop": true,
"matugenTemplateKcolorscheme": true,
"matugenTemplateVscode": false,
"matugenTemplateEmacs": false,
"matugenTemplateZed": false,
"showDock": false,
"dockAutoHide": false,
"dockSmartAutoHide": false,
"dockGroupByApp": 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,
"notificationOverlayEnabled": false,
"notificationPopupShadowEnabled": true,
"notificationPopupPrivacyMode": false,
"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",
"lockScreenActiveMonitor": "all",
"lockScreenInactiveColor": "#000000",
"lockScreenNotificationMode": 0,
"hideBrightnessSlider": false,
"notificationTimeoutLow": 5000,
"notificationTimeoutNormal": 5000,
"notificationTimeoutCritical": 0,
"notificationCompactMode": false,
"notificationPopupPosition": 0,
"notificationAnimationSpeed": 1,
"notificationCustomAnimationDuration": 400,
"notificationHistoryEnabled": true,
"notificationHistoryMaxCount": 50,
"notificationHistoryMaxAgeDays": 7,
"notificationHistorySaveLow": true,
"notificationHistorySaveNormal": true,
"notificationHistorySaveCritical": true,
"notificationRules": [],
"osdAlwaysShowValue": false,
"osdPosition": 5,
"osdVolumeEnabled": true,
"osdMediaVolumeEnabled": true,
"osdMediaPlaybackEnabled": false,
"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,
"updaterUseCustomCommand": false,
"updaterCustomCommand": "",
"updaterTerminalAdditionalParams": "",
"displayNameMode": "system",
"screenPreferences": {
"wallpaper": [
"all"
],
"dock": [],
"notepad": []
},
"showOnLastDisplay": {
"dock": false
},
"niriOutputSettings": {},
"hyprlandOutputSettings": {},
"displayProfiles": {},
"activeDisplayProfile": {},
"displayProfileAutoSelect": false,
"displayShowDisconnected": false,
"displaySnapToEdge": true,
"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
}
},
"clipboardEnterToPaste": false,
"launcherPluginVisibility": {},
"launcherPluginOrder": [],
"configVersion": 5
}
+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 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 import decman
from decman.plugins import pacman from decman.plugins import pacman
import config
class BaseModule(decman.Module):
class Latex(decman.Module):
def __init__(self): def __init__(self):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
super().__init__("latex") super().__init__("latex")
@@ -10,14 +12,39 @@ class BaseModule(decman.Module):
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"texlive", "biber",
"texlive-langgerman",
"perl-yaml-tiny", "perl-yaml-tiny",
"perl-file-homedir", "perl-file-homedir",
"biber", "python-pygments",
"texlab", "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): def files(self) -> dict[str, decman.File]:
# TODO: clone the git repo return {
return super().on_enable(store) 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 from decman.plugins import pacman, aur
class NeovimModule(decman.Module): class Neovim(decman.Module):
def __init__(self): def __init__(self):
"""Neovim Packages""" """Neovim Packages"""
super().__init__("neovim") super().__init__("neovim")
@@ -23,5 +23,4 @@ class NeovimModule(decman.Module):
@aur.packages @aur.packages
def aurpkgs(self) -> set[str]: def aurpkgs(self) -> set[str]:
# Consider switching to WiVRN return {"shell-color-scripts-git", "nvimpager"}
return {"bs-manager-bin", "alvr-bin"}
+25 -2
View File
@@ -1,4 +1,5 @@
import decman import decman
import config
from decman.plugins import pacman from decman.plugins import pacman
@@ -13,16 +14,38 @@ class DevTools(decman.Module):
"act", "act",
"cronie", "cronie",
"cloc", "cloc",
"cmake",
"dart-sass",
"docker", "docker",
"docker-buildx", "docker-buildx",
"docker-compose", "docker-compose",
"filezilla", "filezilla",
"kitty",
"lazygit",
"git-lfs", "git-lfs",
"hugo", "hugo",
"helm",
"kitty",
"kubectl",
"lazygit",
"meld", "meld",
"meson",
"minisign", "minisign",
"python-argcomplete",
"python-black",
"python-build",
"python-colorama",
"python-installer",
"python-jsonschema",
"python-pip",
"python-pyaml",
"python-numpy",
"python-scipy",
"python-sympy",
"serpl", "serpl",
"terminator", "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 { return {
"android-udev", "android-udev",
"android-tools", "android-tools",
"lib32-vulkan-radeon", "gamemode",
"vulkan-radeon",
"steam",
"prismlauncher",
"gamemmode",
"gamescope", "gamescope",
# "lib32-vulkan-radeon",
"obs-studio",
"obs-studio-plugin-browser",
"prismlauncher",
"steam",
"vulkan-radeon",
"v4l2loopback-dkms",
} }
@aur.packages @aur.packages
+1 -1
View File
@@ -2,7 +2,7 @@ import decman
from decman.plugins import aur from decman.plugins import aur
class BasePackages(decman.Module): class SteeringWheel(decman.Module):
def __init__(self): def __init__(self):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
super().__init__("steering-wheel") 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 import decman
from decman.plugins import pacman, aur from decman.plugins import pacman, aur
class BasePackages(decman.Module): class BasePackages(decman.Module):
def __init__(self): def __init__(self, platform: Literal["desktop", "laptop"]):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
self._platform: Literal["desktop", "laptop"] = platform
super().__init__("base") super().__init__("base")
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"base", "base",
"base-devel",
"cifs-utils",
"cups", "cups",
"dosfstools",
"efibootmgr", "efibootmgr",
"exfatprogs",
"git",
"grub", "grub",
"gsl",
"libisoburn",
"libguestfs",
"libmicrohttpd",
"linux", "linux",
"linux-firmware", "linux-firmware",
"linux-headers", "linux-headers",
"lzop",
"mesa",
"mesa-utils",
"mtools",
"ntfs-3g",
"ntfsprogs",
"networkmanager", "networkmanager",
"git", "pacman-contrib",
"plymouth",
"reflector",
"samba",
"sdl12-compat",
"sdl2-compat",
"sudo", "sudo",
"systemd-resolvconf", "systemd-resolvconf",
"trash-cli", "trash-cli",
"base-devel",
"cifs",
"reflector",
"paccache",
"plymouth"
} }
@aur.packages @aur.packages
def aurpkgs(self) -> set[str]: def aurpkgs(self) -> set[str]:
return {"decman"} return {"decman"}
# TODO:
# def file_variables(self) -> dict[str, str]:
# return super().file_variables()
def files(self) -> dict[str, decman.File]: def files(self) -> dict[str, decman.File]:
return { # TODO: File substitutions (for PC and laptop)
"/etc/mkinitcpio.conf": decman.File(source_file="./system/mkinitcpio.conf"), if self._platform == "desktop":
"/etc/pacman.conf": decman.File(source_file="./system/pacman.conf"), return {
"/etc/default/grub": decman.File(source_file="./system/grub"), "/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): def on_change(self, store):
decman.prg(["mkinitcpio", "-P"]) decman.prg(["mkinitcpio", "-P"])
+5 -4
View File
@@ -1,19 +1,20 @@
import decman import decman
from decman.plugins import pacman, aur from decman.plugins import pacman
class BaseModule(decman.Module): class Pipewire(decman.Module):
def __init__(self): def __init__(self):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
super().__init__("base") super().__init__("pipewire")
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"gst-plugin-pipewire",
"pavucontrol",
"pipewire", "pipewire",
"pipewire-alsa", "pipewire-alsa",
"pipewire-pulse", "pipewire-pulse",
"pipewire-jack", "pipewire-jack",
"wireplumber", "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 import decman
from decman.plugins import pacman, aur from decman.plugins import pacman, aur
import config
class BaseModule(decman.Module):
class FileManager(decman.Module):
def __init__(self): def __init__(self):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
super().__init__("yazi") super().__init__("filemanager")
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"yazi", "ifuse",
"libimobiledevice",
"fuse2",
"movit",
"ouch", "ouch",
"grub", "resvg",
"linux", "yazi",
"networkmanager",
"git",
"base-devel",
} }
@aur.packages @aur.packages
def aurpkgs(self) -> set[str]: def aurpkgs(self) -> set[str]:
return {"xdg-desktop-portal-termfilechooser-hunkyburrito-git"} return {"xdg-desktop-portal-termfilechooser-hunkyburrito-git"}
def files(self) -> dict[str, decman.File]: def directories(self) -> dict[str, decman.Directory]:
return super().files() 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 from decman.plugins import pacman, aur
class BaseModule(decman.Module): class Fonts(decman.Module):
def __init__(self): def __init__(self):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
super().__init__("fonts") super().__init__("fonts")
@@ -10,7 +10,7 @@ class BaseModule(decman.Module):
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"adobe-source-code-pro-fonts" "adobe-source-code-pro-fonts",
"ttf-fantasque-nerd", "ttf-fantasque-nerd",
"ttf-jetbrains-mono-nerd", "ttf-jetbrains-mono-nerd",
"ttf-iosevka-nerd", "ttf-iosevka-nerd",
+22 -15
View File
@@ -1,33 +1,40 @@
import decman 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): def __init__(self):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
super().__init__("base") super().__init__("hyprland")
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"cliphist",
# "grimblast",
"hyprland", "hyprland",
"hyprlock", "hyprlock",
"hypridle", "hypridle",
"hyprshutdown", "hyprshutdown",
"grimblast",
"grim",
"xdg-desktop-portal-hyprland",
"hyprpolkitagent",
"hyprpaper",
"wl-clipboard",
"cliphist",
"hyrplauncher",
"hyprpwcenter", "hyprpwcenter",
"hyprtoolkit", "hyprtoolkit",
"hyprpolkitagent",
"hyprpaper",
"libappindicator",
"rtkit",
"wl-clipboard",
"wev",
"xdg-desktop-portal-hyprland",
} }
def directories(self) -> dict[str, decman.Directory]: def directories(self) -> dict[str, decman.Directory]:
return super().directories() return {
f"/home/{config.user}/.config/hypr": decman.Directory(
def on_change(self, store: decman.Store): "./config/hypr", owner=config.user, group=config.user
return super().on_change(store) ),
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"]): def __init__(self, platform: Literal["desktop", "laptop"]):
"""Base packages that should never be uninstalled""" """Base packages that should never be uninstalled"""
self._platform: Literal["desktop", "laptop"] = platform self._platform: Literal["desktop", "laptop"] = platform
super().__init__("base") super().__init__("login")
@pacman.packages @pacman.packages
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
@@ -20,11 +20,19 @@ class LoginManager(decman.Module):
else: else:
return {"gdm"} return {"gdm"}
# TODO: Config files for laptop and desktop
@systemd.units @systemd.units
def units(self) -> set[str]: def units(self) -> set[str]:
if self._platform == "desktop": if self._platform == "desktop":
return {"greetd.service"} return {"greetd.service"}
else: else:
return {"gdm.service"} 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 import decman
from decman.plugins import pacman, aur from decman.plugins import pacman, aur
import config
class UtilPackages(decman.Module): class UtilPackages(decman.Module):
def __init__(self): def __init__(self):
@@ -11,10 +13,10 @@ class UtilPackages(decman.Module):
def pkgs(self) -> set[str]: def pkgs(self) -> set[str]:
return { return {
"bashtop", "bashtop",
"brightnessctl",
"bind",
"bluez", "bluez",
"bluez-utils", "clamav",
"blueman",
"dig",
"evince", "evince",
"fastfetch", "fastfetch",
"fd", "fd",
@@ -24,16 +26,19 @@ class UtilPackages(decman.Module):
"fzf", "fzf",
"gdu", "gdu",
"gimp", "gimp",
"go",
"gnome-disk-utility",
"gwenview", "gwenview",
"handbrake", "handbrake",
"iptables", "iptables",
"libdvdcss",
"man-pages", "man-pages",
"man-db", "man-db",
"mpv", "mpv",
"nextcloud-client", "nextcloud-client",
"obs-studio",
"okular", "okular",
"openconnect", "openconnect",
"os-prober",
"qalculate-qt", "qalculate-qt",
"ripgrep", "ripgrep",
"simple-scan", "simple-scan",
@@ -48,8 +53,26 @@ class UtilPackages(decman.Module):
"zathura-pdf-poppler", "zathura-pdf-poppler",
"zip", "zip",
"zoxide", "zoxide",
"networkmanager-openconnect",
} }
@aur.packages @aur.packages
def aurpkgs(self) -> set[str]: 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
+22
View File
@@ -0,0 +1,22 @@
#!/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 | rev)
fi
echo "
janishutz dev containers
-> Creating container $name <-
"
if $1 == "rm"; then
docker stop $name
docker container rm $name
else
eval "${base_path}/$1-container $name $mount_path"
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
+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" .
npm i --save-dev @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"
+10
View File
@@ -0,0 +1,10 @@
#!/bin/sh
enabled=$(hyprctl getoption input:kb_options | grep "caps:swapescape")
if [[ $enabled == "" ]]; then
hyprctl keyword input:kb_options "caps:swapescape"
notify-send "Swapescape enabled"
else
hyprctl keyword input:kb_options ""
notify-send "Swapescape disabled"
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/sh
cd ~/projects/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
+52
View File
@@ -0,0 +1,52 @@
#!/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
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
+2
View File
@@ -0,0 +1,2 @@
complete -a "base node php python torch-rocm vue webserver" -c dev-containers -f
complete -a "rm" -d "Delete the container for this folder" -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
GCM_CREDENTIAL_STORE=secretservice
RADV_PERFTEST_RT=1
ANDROID_HOME=/home/janis/Android/Sdk
EDITOR=nvim
PAGER=nvimpager
MANPAGER=nvimpager
# QT_QPA_PLATFORMTHEME=gtk3
# 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"
+9
View File
@@ -0,0 +1,9 @@
#%PAM-1.0
auth required pam_securetty.so
auth requisite pam_nologin.so
auth include system-local-login
auth optional pam_gnome_keyring.so
account include system-local-login
session include system-local-login
session optional pam_gnome_keyring.so auto_start
+63
View File
@@ -0,0 +1,63 @@
# GRUB boot loader configuration
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 module_blacklist=hid-thrustmaster,hid_thrustmaster quiet splash"
GRUB_CMDLINE_LINUX="module_blacklist=hid-thrustmaster,hid_thrustmaster"
# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
# Uncomment to enable booting from LUKS encrypted devices
#GRUB_ENABLE_CRYPTODISK=y
# Set to 'countdown' or 'hidden' to change timeout behavior,
# press ESC key to display menu.
GRUB_TIMEOUT_STYLE=menu
# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `videoinfo'
GRUB_GFXMODE=1920x1080
# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
# Uncomment to make GRUB remember the last selection. This requires
# setting 'GRUB_DEFAULT=saved' above.
#GRUB_SAVEDEFAULT=true
# Uncomment to disable submenus in boot menu
#GRUB_DISABLE_SUBMENU=y
# Probing for other operating systems is disabled for security reasons. Read
# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this
# functionality install os-prober and uncomment to detect and include other
# operating systems.
GRUB_DISABLE_OS_PROBER=false
GRUB_THEME="/usr/share/grub/themes/monterey-grub-theme/theme.txt"

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