From 73fe6b87a98e6acb7a455ab5b3d4fdc02cc8f1fc Mon Sep 17 00:00:00 2001 From: Keule2 Date: Thu, 30 Jul 2026 03:52:41 +0200 Subject: [PATCH] feat: migrated to chezmoi --- .chezmoi.toml.tmpl | 15 + .chezmoiignore | 2 + .gitignore | 7 +- README.md | 90 +- ansible.cfg | 4 - .../files => assets}/minegrub/LICENSE | 0 .../files => assets}/minegrub/Minecraft24.pf2 | Bin .../files => assets}/minegrub/Minecraft30.pf2 | Bin .../files => assets}/minegrub/Monocraft22.pf2 | Bin .../minegrub/assets/MinecraftRegular-Bmg3.otf | Bin .../minegrub/assets/Monocraft.otf | Bin .../minegrub/assets/logo_clear.png | Bin .../minegrub/assets/splashes.txt | 0 .../files => assets}/minegrub/background.png | Bin .../files => assets}/minegrub/dirt.png | Bin .../files => assets}/minegrub/item_c.png | Bin .../files => assets}/minegrub/item_e.png | Bin .../files => assets}/minegrub/item_n.png | Bin .../files => assets}/minegrub/item_ne.png | Bin .../files => assets}/minegrub/item_nw.png | Bin .../files => assets}/minegrub/item_s.png | Bin .../files => assets}/minegrub/item_se.png | Bin .../files => assets}/minegrub/item_sw.png | Bin .../files => assets}/minegrub/item_w.png | Bin .../files => assets}/minegrub/logo.png | Bin .../minegrub/selected_item_c.png | Bin .../minegrub/selected_item_e.png | Bin .../minegrub/selected_item_n.png | Bin .../minegrub/selected_item_ne.png | Bin .../minegrub/selected_item_nw.png | Bin .../minegrub/selected_item_s.png | Bin .../minegrub/selected_item_se.png | Bin .../minegrub/selected_item_sw.png | Bin .../minegrub/selected_item_w.png | Bin .../files => assets}/minegrub/static_bar.png | Bin .../files => assets}/minegrub/term_e.png | Bin .../files => assets}/minegrub/term_n.png | Bin .../files => assets}/minegrub/term_ne.png | Bin .../files => assets}/minegrub/term_nw.png | Bin .../files => assets}/minegrub/term_s.png | Bin .../files => assets}/minegrub/term_se.png | Bin .../files => assets}/minegrub/term_sw.png | Bin .../files => assets}/minegrub/term_w.png | Bin .../files => assets}/minegrub/theme.txt | 0 {roles/system/files => assets}/pacman.conf | 0 callback_plugins/beautiful_output.py | 1466 ------------ roles/bash/files/.bashrc => dot_bashrc | 28 +- .../files => dot_config/fish}/config.fish | 16 +- dot_config/hypr/dms/binds-user.lua | 38 + dot_config/hypr/dms/binds.lua | 171 ++ dot_config/hypr/dms/colors.lua | 27 + dot_config/hypr/dms/cursor.lua | 6 + dot_config/hypr/dms/layout.lua | 18 + dot_config/hypr/dms/outputs.lua.tmpl | 14 + dot_config/hypr/dms/windowrules.lua | 8 + dot_config/hypr/hyprland.lua.tmpl | 112 + dot_config/hypr/hyprland/colors.conf | 32 + dot_config/hypr/hyprlock/colors.conf | 12 + .../nvim/files => dot_config/nvim}/README.md | 0 .../nvim/files => dot_config/nvim}/init.lua | 0 .../nvim}/lua/community.lua | 0 .../nvim}/lua/lazy_setup.lua | 0 .../nvim}/lua/plugins/astrocore.lua | 0 .../nvim}/lua/plugins/astrolsp.lua | 0 .../nvim}/lua/plugins/astroui.lua | 0 .../nvim}/lua/plugins/mappings.lua | 0 .../nvim}/lua/plugins/mason.lua | 0 .../nvim}/lua/plugins/neo-tree.lua | 0 .../nvim}/lua/plugins/none-ls.lua | 0 .../nvim}/lua/plugins/treesitter.lua | 0 .../nvim}/lua/plugins/user.lua | 0 .../files => dot_config/nvim}/lua/polish.lua | 0 .../nvim/files => dot_config/nvim}/neovim.yml | 0 .../files => dot_config/nvim}/selene.toml | 0 .../starship/starship.toml.tmpl | 4 +- .../files => dot_config/yazi}/keymap.toml | 0 .../files => dot_config/yazi}/package.toml | 0 .../yazi}/plugins/bookmarks.yazi/LICENSE | 0 .../yazi}/plugins/bookmarks.yazi/README.md | 0 .../yazi}/plugins/bookmarks.yazi/main.lua | 0 .../yazi/files => dot_config/yazi}/yazi.toml | 0 dot_gitconfig.tmpl | 10 + encrypted_dot_wakatime.cfg.age | 42 + group_vars/all | 29 - install.sh | 163 -- main.yml | 52 - requirements/arch.yml | 2 - requirements/default.yml | 2 - roles/alacritty/files/alacritty.toml | 19 - .../alacritty/files/catppuccin-macchiato.toml | 97 - roles/alacritty/tasks/main.yml | 22 - roles/bash/tasks/main.yml | 12 - roles/btop/files/btop.conf | 248 --- roles/btop/tasks/main.yml | 18 - roles/discord/files/Preferences | 1 - roles/discord/files/storage/lang.json | 3 - roles/discord/files/storage/settings.json | 62 - .../themes/Catppuccin-Macchiato-BD/LICENSE | 21 - .../Catppuccin-Macchiato-BD/manifest.json | 13 - .../themes/Catppuccin-Macchiato-BD/src.css | 11 - roles/discord/tasks/main.yml | 18 - roles/fish/tasks/main.yml | 26 - roles/hypr/files/devices.conf | 5 - roles/hypr/files/env.conf | 9 - roles/hypr/files/hyprland.conf | 83 - roles/hypr/files/keybinds.conf | 102 - roles/hypr/files/nvidia.conf | 7 - roles/hypr/tasks/main.yml | 34 - roles/hypr/templates/startup.conf | 19 - roles/hypr/templates/windowrule.conf | 33 - .../Catppuccin-Frappe-Rosewater.kvconfig | 464 ---- .../Catppuccin-Frappe-Rosewater.svg | 1958 ----------------- .../files/Catppuccin-Frappe-Rosewater/LICENSE | 21 - roles/kvantum/files/kvantum.kvconfig | 2 - roles/kvantum/tasks/main.yml | 17 - roles/minegrub/tasks/main.yml | 17 - roles/nvim/files/.luarc.json | 3 - roles/nvim/files/.neoconf.json | 20 - roles/nvim/files/.stylua.toml | 7 - roles/nvim/tasks/main.yml | 18 - .../files/.config/gtk-3.0/settings.ini | 17 - .../files/.config/xsettingsd/xsettingsd.conf | 9 - roles/nwg-look/files/.gtkrc-2.0 | 19 - roles/nwg-look/tasks/main.yml | 11 - roles/qt5ct/files/qt5ct.conf | 32 - roles/qt5ct/tasks/main.yml | 17 - roles/sddm/files/sddm.conf.d/default.conf | 139 -- .../catppuccin-macchiato/Components/Clock.qml | 14 - .../Components/LoginPanel.qml | 147 -- .../Components/PasswordField.qml | 48 - .../Components/PowerButton.qml | 41 - .../Components/RebootButton.qml | 41 - .../Components/SessionPanel.qml | 156 -- .../Components/SleepButton.qml | 41 - .../Components/UserField.qml | 50 - .../files/themes/catppuccin-macchiato/LICENSE | 21 - .../themes/catppuccin-macchiato/Main.qml | 48 - .../assets/angle-down.png | Bin 6488 -> 0 bytes .../catppuccin-macchiato/backgrounds/.gitkeep | 0 .../catppuccin-macchiato/icons/power.svg | 14 - .../catppuccin-macchiato/icons/reboot.svg | 13 - .../catppuccin-macchiato/icons/settings.svg | 1 - .../catppuccin-macchiato/icons/sleep.svg | 5 - .../catppuccin-macchiato/metadata.desktop | 14 - .../themes/catppuccin-macchiato/preview.png | Bin 34689 -> 0 bytes .../themes/catppuccin-macchiato/theme.conf | 39 - roles/sddm/tasks/main.yml | 28 - roles/starship/tasks/main.yml | 12 - roles/system/tasks/Archlinux.yml | 284 --- roles/system/tasks/main.yml | 11 - roles/wakatime/tasks/main.yml | 7 - roles/wakatime/templates/wakatime.cfg | 3 - roles/yazi/tasks/main.yml | 18 - run_once_00-prereqs.sh | 36 + run_once_10-install-base.sh | 67 + run_once_20-install-gui.sh | 53 + run_once_30-install-power-mgmt.sh | 40 + run_once_40-install-apps.sh | 47 + run_once_50-configure-system.sh | 48 + run_once_99-set-shell.sh | 21 + 160 files changed, 902 insertions(+), 6470 deletions(-) create mode 100644 .chezmoi.toml.tmpl create mode 100644 .chezmoiignore delete mode 100644 ansible.cfg rename {roles/minegrub/files => assets}/minegrub/LICENSE (100%) rename {roles/minegrub/files => assets}/minegrub/Minecraft24.pf2 (100%) rename {roles/minegrub/files => assets}/minegrub/Minecraft30.pf2 (100%) rename {roles/minegrub/files => assets}/minegrub/Monocraft22.pf2 (100%) rename {roles/minegrub/files => assets}/minegrub/assets/MinecraftRegular-Bmg3.otf (100%) rename {roles/minegrub/files => assets}/minegrub/assets/Monocraft.otf (100%) rename {roles/minegrub/files => assets}/minegrub/assets/logo_clear.png (100%) rename {roles/minegrub/files => assets}/minegrub/assets/splashes.txt (100%) rename {roles/minegrub/files => assets}/minegrub/background.png (100%) rename {roles/minegrub/files => assets}/minegrub/dirt.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_c.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_e.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_n.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_ne.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_nw.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_s.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_se.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_sw.png (100%) rename {roles/minegrub/files => assets}/minegrub/item_w.png (100%) rename {roles/minegrub/files => assets}/minegrub/logo.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_c.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_e.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_n.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_ne.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_nw.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_s.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_se.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_sw.png (100%) rename {roles/minegrub/files => assets}/minegrub/selected_item_w.png (100%) rename {roles/minegrub/files => assets}/minegrub/static_bar.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_e.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_n.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_ne.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_nw.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_s.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_se.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_sw.png (100%) rename {roles/minegrub/files => assets}/minegrub/term_w.png (100%) rename {roles/minegrub/files => assets}/minegrub/theme.txt (100%) rename {roles/system/files => assets}/pacman.conf (100%) delete mode 100644 callback_plugins/beautiful_output.py rename roles/bash/files/.bashrc => dot_bashrc (64%) rename {roles/fish/files => dot_config/fish}/config.fish (94%) create mode 100644 dot_config/hypr/dms/binds-user.lua create mode 100644 dot_config/hypr/dms/binds.lua create mode 100644 dot_config/hypr/dms/colors.lua create mode 100644 dot_config/hypr/dms/cursor.lua create mode 100644 dot_config/hypr/dms/layout.lua create mode 100644 dot_config/hypr/dms/outputs.lua.tmpl create mode 100644 dot_config/hypr/dms/windowrules.lua create mode 100644 dot_config/hypr/hyprland.lua.tmpl create mode 100644 dot_config/hypr/hyprland/colors.conf create mode 100644 dot_config/hypr/hyprlock/colors.conf rename {roles/nvim/files => dot_config/nvim}/README.md (100%) rename {roles/nvim/files => dot_config/nvim}/init.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/community.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/lazy_setup.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/astrocore.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/astrolsp.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/astroui.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/mappings.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/mason.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/neo-tree.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/none-ls.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/treesitter.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/plugins/user.lua (100%) rename {roles/nvim/files => dot_config/nvim}/lua/polish.lua (100%) rename {roles/nvim/files => dot_config/nvim}/neovim.yml (100%) rename {roles/nvim/files => dot_config/nvim}/selene.toml (100%) rename roles/starship/files/starship.toml => dot_config/starship/starship.toml.tmpl (96%) rename {roles/yazi/files => dot_config/yazi}/keymap.toml (100%) rename {roles/yazi/files => dot_config/yazi}/package.toml (100%) rename {roles/yazi/files => dot_config/yazi}/plugins/bookmarks.yazi/LICENSE (100%) rename {roles/yazi/files => dot_config/yazi}/plugins/bookmarks.yazi/README.md (100%) rename {roles/yazi/files => dot_config/yazi}/plugins/bookmarks.yazi/main.lua (100%) rename {roles/yazi/files => dot_config/yazi}/yazi.toml (100%) create mode 100644 dot_gitconfig.tmpl create mode 100644 encrypted_dot_wakatime.cfg.age delete mode 100644 group_vars/all delete mode 100755 install.sh delete mode 100644 main.yml delete mode 100644 requirements/arch.yml delete mode 100644 requirements/default.yml delete mode 100644 roles/alacritty/files/alacritty.toml delete mode 100644 roles/alacritty/files/catppuccin-macchiato.toml delete mode 100644 roles/alacritty/tasks/main.yml delete mode 100644 roles/bash/tasks/main.yml delete mode 100644 roles/btop/files/btop.conf delete mode 100644 roles/btop/tasks/main.yml delete mode 100644 roles/discord/files/Preferences delete mode 100644 roles/discord/files/storage/lang.json delete mode 100644 roles/discord/files/storage/settings.json delete mode 100644 roles/discord/files/themes/Catppuccin-Macchiato-BD/LICENSE delete mode 100644 roles/discord/files/themes/Catppuccin-Macchiato-BD/manifest.json delete mode 100644 roles/discord/files/themes/Catppuccin-Macchiato-BD/src.css delete mode 100644 roles/discord/tasks/main.yml delete mode 100644 roles/fish/tasks/main.yml delete mode 100755 roles/hypr/files/devices.conf delete mode 100755 roles/hypr/files/env.conf delete mode 100755 roles/hypr/files/hyprland.conf delete mode 100755 roles/hypr/files/keybinds.conf delete mode 100755 roles/hypr/files/nvidia.conf delete mode 100644 roles/hypr/tasks/main.yml delete mode 100755 roles/hypr/templates/startup.conf delete mode 100755 roles/hypr/templates/windowrule.conf delete mode 100644 roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.kvconfig delete mode 100644 roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.svg delete mode 100644 roles/kvantum/files/Catppuccin-Frappe-Rosewater/LICENSE delete mode 100644 roles/kvantum/files/kvantum.kvconfig delete mode 100644 roles/kvantum/tasks/main.yml delete mode 100644 roles/minegrub/tasks/main.yml delete mode 100644 roles/nvim/files/.luarc.json delete mode 100644 roles/nvim/files/.neoconf.json delete mode 100644 roles/nvim/files/.stylua.toml delete mode 100644 roles/nvim/tasks/main.yml delete mode 100644 roles/nwg-look/files/.config/gtk-3.0/settings.ini delete mode 100644 roles/nwg-look/files/.config/xsettingsd/xsettingsd.conf delete mode 100644 roles/nwg-look/files/.gtkrc-2.0 delete mode 100644 roles/nwg-look/tasks/main.yml delete mode 100644 roles/qt5ct/files/qt5ct.conf delete mode 100644 roles/qt5ct/tasks/main.yml delete mode 100755 roles/sddm/files/sddm.conf.d/default.conf delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/Clock.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/LoginPanel.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/PasswordField.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/PowerButton.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/RebootButton.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/SessionPanel.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/SleepButton.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Components/UserField.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/LICENSE delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/Main.qml delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/assets/angle-down.png delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/backgrounds/.gitkeep delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/icons/power.svg delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/icons/reboot.svg delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/icons/settings.svg delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/icons/sleep.svg delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/metadata.desktop delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/preview.png delete mode 100644 roles/sddm/files/themes/catppuccin-macchiato/theme.conf delete mode 100644 roles/sddm/tasks/main.yml delete mode 100644 roles/starship/tasks/main.yml delete mode 100644 roles/system/tasks/Archlinux.yml delete mode 100644 roles/system/tasks/main.yml delete mode 100644 roles/wakatime/tasks/main.yml delete mode 100644 roles/wakatime/templates/wakatime.cfg delete mode 100644 roles/yazi/tasks/main.yml create mode 100755 run_once_00-prereqs.sh create mode 100755 run_once_10-install-base.sh create mode 100755 run_once_20-install-gui.sh create mode 100755 run_once_30-install-power-mgmt.sh create mode 100755 run_once_40-install-apps.sh create mode 100755 run_once_50-configure-system.sh create mode 100755 run_once_99-set-shell.sh diff --git a/.chezmoi.toml.tmpl b/.chezmoi.toml.tmpl new file mode 100644 index 0000000..de91be3 --- /dev/null +++ b/.chezmoi.toml.tmpl @@ -0,0 +1,15 @@ +encryption = "age" + +[age] +identity = "~/.config/chezmoi/key" +recipient = "age1pq1q8zvperhkgayvaeyppanuwml6l54a2ehp8au3z96qzsympcjxhsvzdk9exks48fufdr3xaq8n65tque5xmfe5q6gjelsv55y6wa38fxxnurujk8dzup9zl9j3343mvdndnl0y20uejscwe3lfzn382ftspcespwdkpy063nz2ne4jalf5amuk9uuhyq7gezyg0ryhps2vwrsesckqe3md9nt50szym5zwmc9n3mq4faxahrlvystfcs4wq9ccjv9552v5x34vjs5zn83qy4skktkgvppdga95kt9jjx2fc3jvtqrusrf8rr3qlpckz0nqxndcqkstxlte3n8tjmuahnj8ph4prfhn899ze9wnxyznregyu6nnj365rry86rdagj53fwg0x6n9zhx62e2x7jshzyydahzp264efhakf9llacfvlwx6efe2sppk5zfsp0m8vgeyv3fvrxqrv3y4zj6cgj29kdlc6mvtpeqrcxkkd0xcka44p2287nphx6shwk426jl3v8qedtg5n6rcq68r454dfhxffr356gj6x3sc7a6890pkn55qa63s74nju4ytakmzescsrxamd6psgx8vjrcyvxfqlapywd74z5456dr2h3s49yud9ekzly7gcl04jss9kg8zelgfnqatslz6qtv6tzrgcqzm2rqc3asjylh2vhe9ze3qvtnucnqkddzygqtkr99apg67r23ur6ey2dznw5j546qq3uxnf4vydj8wv9cxd0xzs8xvn9cxu93xt5kxnr8j3ry2al7rszczu5faf24wqqh835uevdwn2r5szjvjdrtg7fw4zgkcpft2fgqm35fafavvulezhj44d5jy6yly4zmckeh4xpfh82zkwkegav373t65upepvykqfgcnwvtsatewmska82ud76ak37gw0x94xycwszq8sm29q4gpq9f8f2eyk6dj8aqhmdurr7hh87scqf4sjt669w95fsyrkr7eynltw8u3fcaur2yq44yk6sgr38wlnrxlcxzmv4st5d5c0zwjprds3kn26j5d6arx7gxw8nrgs57cetjnx586h25ltv2hh5c27xvdj20l2cpd7434mkscfe0jp395mphsyrl0hfh69vvxvh3yyq7a2eeqvc03fcnkfju5lksvexg3nr43qtgk5wqcw36h4z4jy772qdusu6x8wsnh23c9v48cfvm5q3r6x79ptr63sdrejd9gpun9wwckp5r0qusp7g9qysyt8yz9235e0reungjlaz2pnvaqksuaxjy2fpyn8f4uvg82rtlhq8f3373np259sq3fl39d32whyk62a5dukf7se6qkaykwwxgcprp0patv5prfukyjdtpx3ym40nnye9a8m9snk4g2xyenwh6wcldt230c6zvanp3vyfmtvc6tsdgmsvu62n5jkw2cfc9yzxyv9st72ampfns3e96ymack4fvz49p6c7vq0xf84380axzs9ajx9ssdwwra4auczj3f4uutpwh4rypmdxs3y2qvutzh0am08yq5w6wjwgv6yad2aex3s2s2gmzwllw2tpnlzv2vejnm3t24zrlkyfhcuqu0a5ppfex3r2ekrwsy4lz9w045wen4tms7pg638zu3wwg7fjrf6ctjtsjh8yuxf58gcwpy50ym8xg30n2gr09kmp9dyaeqsespdfvz9m4085pk25jdtdhprr8dh9m44wyndc8zhsz4gwx26kkyscq7kctd3lxpl8jwszkjyk9tmqrxyvjxe29c7w8g0qcqulnc326xwpt9nrgqssww0wnya3w42392dwpukthq79zvzlw60qruh6vnnxe6w849ajxe3lss8e0rthnq6gpfm0f0q754nvn9f05xvz3ptj5kch6d5hpzgwdkrjuw7rrwxhs7gdn3gkk6puvs62yge6zrg7jalyx" + +[data] +{{ $system := promptStringOnce . "system" "Which system class is this machine?" "desktop" }} +system = {{ $system | quote }} + +{{ $email := promptStringOnce . "email" "What is your email address (git)" }} +email = {{ $email | quote }} + +{{ $name := promptStringOnce . "name" "What is your name (git)" }} +name = {{ $name | quote }} diff --git a/.chezmoiignore b/.chezmoiignore new file mode 100644 index 0000000..67ba6a0 --- /dev/null +++ b/.chezmoiignore @@ -0,0 +1,2 @@ +assets/ +README.md diff --git a/.gitignore b/.gitignore index 7f473d9..d3c8379 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -roles/z -roles/test error.log -callback_plugins/__pycache__ +.callback_plugins/__pycache__ +# chezmoi local state — never committed +.chezmoi/ +*.chezmoi.state \ No newline at end of file diff --git a/README.md b/README.md index e380350..6649b95 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,64 @@ -# Installation -Clone the repo and execute the `install.sh` script.
-Or use this command: +# Dotfiles (chezmoi) + +Dotfiles managed by [chezmoi](https://www.chezmoi.io/). The repo works on +Arch and Ubuntu (not complete) and has three machine classes: **server**, **desktop**, and **laptop**. + + +## First-time install on a new machine + +### 1. Install prerequisites + ```bash -bash -c "$(curl -fsSL https://gitea.keuledrive.de/Keule2/Dotfiles/raw/branch/main/install.sh)" -``` -Or this command to use arguments: -```bash -curl -fsSL "https://gitea.keuledrive.de/Keule2/Dotfiles/raw/branch/main/install.sh" | bash -s -- -e "system=server" +# Arch +sudo pacman -S git curl age jq chezmoi + +# Ubuntu +sudo apt-get install -y git curl age jq +# chezmoi: see https://www.chezmoi.io/install/ ``` -# Update -Just execute the `install.sh` script again. +### 2. Provision the age key -# Usage -All additional parameters are passed to the ansible playbook. This means that you can skip tags or only execute desired tags.
-Example: Skip alacritty +The age key needs to be placed at `~/.config/chezmoi/key` +With following permissions ```bash -./install.sh --skip-tags alacritty -``` -Example: Only execute alacritty and fish -```bash -./install.sh -t alacritty,fish +chmod 600 ~/.config/chezmoi/key ``` -# Settings -There are two ways to set settings/values. -1. Create/Edit: `$HOME/.config/dotfiles/values.yml` -2. Edit: `$HOME/.dotfiles/group_vars/all` +### 3. Bootstrap -## Ansible Vault -Vault password file: `$HOME/.config/dotfiles/vault-password.txt` +```bash +chezmoi init --apply git@gitea.keuledrive.de:Keule2/Dotfiles.git +``` -## Settings -### System -|Value |Desc |Default| -|------------|-------------------------------------------------------|-------| -|server |Minimal installation (CMD tools) | | -|desktop |Install WM and desktop applications |x | -|desktop_full|Install additional packages for the desktop (e.g. wine)| | -
+Will ask: -# TODO -- AGS: Bar, AppLauncher, PowerMenu, Notifications, Calculator, Emoji-Picker, ... -- Ubuntu/Debian Support -- ... +- **Which system class is this machine?** — pick `server`, `desktop`, or `laptop`. +- **EMAIL** — for git config. + +## Usage + +| Command | Effect | +|---|---| +| `chezmoi apply` | apply any local changes to dotfiles and run-once scripts | +| `chezmoi update` | `git pull` + `apply` | +| `chezmoi edit ` | open a tracked file in `$EDITOR` | +| `chezmoi cd` | shell into the source dir | +| `chezmoi diff` | show pending changes against your home | +| `chezmoi managed` | list files chezmoi manages | + +## Changing the system class + +Two ways: + +```bash +# Option A: re-prompt +chezmoi init --apply --force --prompt + +# Option B: edit the cached value +$EDITOR ~/.config/chezmoi/chezmoi.toml # change [data].system +chezmoi apply +``` + +## TODO +- Check packages e.g. gaming Steam/Lutris diff --git a/ansible.cfg b/ansible.cfg deleted file mode 100644 index 808ad9c..0000000 --- a/ansible.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[defaults] -stdout_callback = beautiful_output -# Use the stdout_callback when running ad-hoc commands. -bin_ansible_callbacks = True diff --git a/roles/minegrub/files/minegrub/LICENSE b/assets/minegrub/LICENSE similarity index 100% rename from roles/minegrub/files/minegrub/LICENSE rename to assets/minegrub/LICENSE diff --git a/roles/minegrub/files/minegrub/Minecraft24.pf2 b/assets/minegrub/Minecraft24.pf2 similarity index 100% rename from roles/minegrub/files/minegrub/Minecraft24.pf2 rename to assets/minegrub/Minecraft24.pf2 diff --git a/roles/minegrub/files/minegrub/Minecraft30.pf2 b/assets/minegrub/Minecraft30.pf2 similarity index 100% rename from roles/minegrub/files/minegrub/Minecraft30.pf2 rename to assets/minegrub/Minecraft30.pf2 diff --git a/roles/minegrub/files/minegrub/Monocraft22.pf2 b/assets/minegrub/Monocraft22.pf2 similarity index 100% rename from roles/minegrub/files/minegrub/Monocraft22.pf2 rename to assets/minegrub/Monocraft22.pf2 diff --git a/roles/minegrub/files/minegrub/assets/MinecraftRegular-Bmg3.otf b/assets/minegrub/assets/MinecraftRegular-Bmg3.otf similarity index 100% rename from roles/minegrub/files/minegrub/assets/MinecraftRegular-Bmg3.otf rename to assets/minegrub/assets/MinecraftRegular-Bmg3.otf diff --git a/roles/minegrub/files/minegrub/assets/Monocraft.otf b/assets/minegrub/assets/Monocraft.otf similarity index 100% rename from roles/minegrub/files/minegrub/assets/Monocraft.otf rename to assets/minegrub/assets/Monocraft.otf diff --git a/roles/minegrub/files/minegrub/assets/logo_clear.png b/assets/minegrub/assets/logo_clear.png similarity index 100% rename from roles/minegrub/files/minegrub/assets/logo_clear.png rename to assets/minegrub/assets/logo_clear.png diff --git a/roles/minegrub/files/minegrub/assets/splashes.txt b/assets/minegrub/assets/splashes.txt similarity index 100% rename from roles/minegrub/files/minegrub/assets/splashes.txt rename to assets/minegrub/assets/splashes.txt diff --git a/roles/minegrub/files/minegrub/background.png b/assets/minegrub/background.png similarity index 100% rename from roles/minegrub/files/minegrub/background.png rename to assets/minegrub/background.png diff --git a/roles/minegrub/files/minegrub/dirt.png b/assets/minegrub/dirt.png similarity index 100% rename from roles/minegrub/files/minegrub/dirt.png rename to assets/minegrub/dirt.png diff --git a/roles/minegrub/files/minegrub/item_c.png b/assets/minegrub/item_c.png similarity index 100% rename from roles/minegrub/files/minegrub/item_c.png rename to assets/minegrub/item_c.png diff --git a/roles/minegrub/files/minegrub/item_e.png b/assets/minegrub/item_e.png similarity index 100% rename from roles/minegrub/files/minegrub/item_e.png rename to assets/minegrub/item_e.png diff --git a/roles/minegrub/files/minegrub/item_n.png b/assets/minegrub/item_n.png similarity index 100% rename from roles/minegrub/files/minegrub/item_n.png rename to assets/minegrub/item_n.png diff --git a/roles/minegrub/files/minegrub/item_ne.png b/assets/minegrub/item_ne.png similarity index 100% rename from roles/minegrub/files/minegrub/item_ne.png rename to assets/minegrub/item_ne.png diff --git a/roles/minegrub/files/minegrub/item_nw.png b/assets/minegrub/item_nw.png similarity index 100% rename from roles/minegrub/files/minegrub/item_nw.png rename to assets/minegrub/item_nw.png diff --git a/roles/minegrub/files/minegrub/item_s.png b/assets/minegrub/item_s.png similarity index 100% rename from roles/minegrub/files/minegrub/item_s.png rename to assets/minegrub/item_s.png diff --git a/roles/minegrub/files/minegrub/item_se.png b/assets/minegrub/item_se.png similarity index 100% rename from roles/minegrub/files/minegrub/item_se.png rename to assets/minegrub/item_se.png diff --git a/roles/minegrub/files/minegrub/item_sw.png b/assets/minegrub/item_sw.png similarity index 100% rename from roles/minegrub/files/minegrub/item_sw.png rename to assets/minegrub/item_sw.png diff --git a/roles/minegrub/files/minegrub/item_w.png b/assets/minegrub/item_w.png similarity index 100% rename from roles/minegrub/files/minegrub/item_w.png rename to assets/minegrub/item_w.png diff --git a/roles/minegrub/files/minegrub/logo.png b/assets/minegrub/logo.png similarity index 100% rename from roles/minegrub/files/minegrub/logo.png rename to assets/minegrub/logo.png diff --git a/roles/minegrub/files/minegrub/selected_item_c.png b/assets/minegrub/selected_item_c.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_c.png rename to assets/minegrub/selected_item_c.png diff --git a/roles/minegrub/files/minegrub/selected_item_e.png b/assets/minegrub/selected_item_e.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_e.png rename to assets/minegrub/selected_item_e.png diff --git a/roles/minegrub/files/minegrub/selected_item_n.png b/assets/minegrub/selected_item_n.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_n.png rename to assets/minegrub/selected_item_n.png diff --git a/roles/minegrub/files/minegrub/selected_item_ne.png b/assets/minegrub/selected_item_ne.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_ne.png rename to assets/minegrub/selected_item_ne.png diff --git a/roles/minegrub/files/minegrub/selected_item_nw.png b/assets/minegrub/selected_item_nw.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_nw.png rename to assets/minegrub/selected_item_nw.png diff --git a/roles/minegrub/files/minegrub/selected_item_s.png b/assets/minegrub/selected_item_s.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_s.png rename to assets/minegrub/selected_item_s.png diff --git a/roles/minegrub/files/minegrub/selected_item_se.png b/assets/minegrub/selected_item_se.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_se.png rename to assets/minegrub/selected_item_se.png diff --git a/roles/minegrub/files/minegrub/selected_item_sw.png b/assets/minegrub/selected_item_sw.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_sw.png rename to assets/minegrub/selected_item_sw.png diff --git a/roles/minegrub/files/minegrub/selected_item_w.png b/assets/minegrub/selected_item_w.png similarity index 100% rename from roles/minegrub/files/minegrub/selected_item_w.png rename to assets/minegrub/selected_item_w.png diff --git a/roles/minegrub/files/minegrub/static_bar.png b/assets/minegrub/static_bar.png similarity index 100% rename from roles/minegrub/files/minegrub/static_bar.png rename to assets/minegrub/static_bar.png diff --git a/roles/minegrub/files/minegrub/term_e.png b/assets/minegrub/term_e.png similarity index 100% rename from roles/minegrub/files/minegrub/term_e.png rename to assets/minegrub/term_e.png diff --git a/roles/minegrub/files/minegrub/term_n.png b/assets/minegrub/term_n.png similarity index 100% rename from roles/minegrub/files/minegrub/term_n.png rename to assets/minegrub/term_n.png diff --git a/roles/minegrub/files/minegrub/term_ne.png b/assets/minegrub/term_ne.png similarity index 100% rename from roles/minegrub/files/minegrub/term_ne.png rename to assets/minegrub/term_ne.png diff --git a/roles/minegrub/files/minegrub/term_nw.png b/assets/minegrub/term_nw.png similarity index 100% rename from roles/minegrub/files/minegrub/term_nw.png rename to assets/minegrub/term_nw.png diff --git a/roles/minegrub/files/minegrub/term_s.png b/assets/minegrub/term_s.png similarity index 100% rename from roles/minegrub/files/minegrub/term_s.png rename to assets/minegrub/term_s.png diff --git a/roles/minegrub/files/minegrub/term_se.png b/assets/minegrub/term_se.png similarity index 100% rename from roles/minegrub/files/minegrub/term_se.png rename to assets/minegrub/term_se.png diff --git a/roles/minegrub/files/minegrub/term_sw.png b/assets/minegrub/term_sw.png similarity index 100% rename from roles/minegrub/files/minegrub/term_sw.png rename to assets/minegrub/term_sw.png diff --git a/roles/minegrub/files/minegrub/term_w.png b/assets/minegrub/term_w.png similarity index 100% rename from roles/minegrub/files/minegrub/term_w.png rename to assets/minegrub/term_w.png diff --git a/roles/minegrub/files/minegrub/theme.txt b/assets/minegrub/theme.txt similarity index 100% rename from roles/minegrub/files/minegrub/theme.txt rename to assets/minegrub/theme.txt diff --git a/roles/system/files/pacman.conf b/assets/pacman.conf similarity index 100% rename from roles/system/files/pacman.conf rename to assets/pacman.conf diff --git a/callback_plugins/beautiful_output.py b/callback_plugins/beautiful_output.py deleted file mode 100644 index a2493cd..0000000 --- a/callback_plugins/beautiful_output.py +++ /dev/null @@ -1,1466 +0,0 @@ -# -*- coding: utf-8 -*- - -# MIT License -# -# Copyright (c) 2019 Thiago Alves -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""A clean and opinionated output callback plugin. - -The goal of this plugin is to consolidated Ansible's output in the style of -LINUX/UNIX startup logs, and use unicode symbols to display task status. - -This Callback plugin is intended to be used on playbooks that you have -to execute *"in-person"*, since it does always output to the screen. - -In order to use this Callback plugin, you should add this Role as a dependency -in your project, and set the ``stdout_callback`` option on the -:file:`ansible.cfg file:: - - stdout_callback = beautiful_output - -""" - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - -__metaclass__ = type - -DOCUMENTATION = """--- - callback: beautiful_output - type: stdout - author: Thiago Alves - short_description: a clean, condensed, and beautiful Ansible output - version_added: 2.8 - description: - - >- - Consolidated Ansible output in the style of LINUX/UNIX startup - logs, and use unicode symbols to organize tasks. - extends_documentation_fragment: - - default_callback - requirements: - - set as stdout in configuration -""" - -import json -import locale -import os -import re -import textwrap -import yaml - -from ansible import constants as C -from ansible import context -from ansible.executor.task_result import TaskResult -from ansible.module_utils._text import to_text, to_bytes -from ansible.module_utils.common._collections_compat import Mapping -from ansible.parsing.utils.yaml import from_yaml -from ansible.plugins.callback import CallbackBase -from ansible.template import Templar -from ansible.utils.color import colorize, hostcolor, stringc -from ansible.vars.clean import strip_internal_keys, module_response_deepcopy -from ansible.vars.hostvars import HostVarsVars -from collections import OrderedDict -try: - from collections.abc import Sequence -except: - from collections import Sequence -from numbers import Number -from os.path import basename, isdir -from watchdog.observers import Observer -from watchdog.events import FileSystemEventHandler, EVENT_TYPE_CREATED - -_symbol = { - "success": to_text("✔"), - "warning": to_text("⚠"), - "failure": to_text("✘"), - "dead": to_text("✝"), - "yaml": to_text("🅨"), - "retry": to_text("️↻"), - "loop": to_text("∑"), - "arrow_right": to_text("➞"), - "skip": to_text("⤼"), - "flag": to_text("⚑"), -} # type: Dict[str,str] -""":obj:`dict` of :obj:`str` to :obj:`str`: A dictionary of symbols to be used -when the Callback needs to display a symbol on the screen. -""" - -_session_title = { - "msg": "Message", - "stdout": "Output", - "stderr": "Error output", - "module_stdout": "Module output", - "module_stderr": "Module error output", - "rc": "Return code", - "changed": "Environment changed", - "_ansible_no_log": "Omit logs", - "use_stderr": "Use STDERR to output", -} # type: Dict[str,str] -""":obj:`dict` of :obj:`str` to :obj:`str`: A dictionary of terms used as -section title when displayin the output of a command. -""" - -_session_order = OrderedDict( - [ - ("_ansible_no_log", 3), - ("use_stderr", 4), - ("msg", 1), - ("stdout", 1), - ("module_stdout", 1), - ("stderr", 1), - ("module_stderr", 1), - ("rc", 3), - ("changed", 3), - ] -) -""":obj:`dict` of :obj:`str` to :obj:`str`: A dictionary representing the -display an order in wich sections should be displayed to user. -""" - -ansi_escape = re.compile( - r""" - \x1B # ESC - [@-_] # 7-bit C1 Fe - [0-?]* # Parameter bytes - [ -/]* # Intermediate bytes - [@-~] # Final byte -""", - re.VERBOSE, -) -""":regexp:`Pattern`: A regular expression that can match any ANSI escape -sequence in a string. -""" - - -def symbol(key, color=None): # type: (str, str) -> str - """Helper function that returns an Unicode character based on the given - ``key``. This function also colorize the returned string using the - :func:`~ansible.utils.color.stringc` function, depending on the value - passed to `color`. - - Args: - key (:obj:`str`): One of the keys used to define the dictionary - :const:`~beautiful_output._symbol`. - color (:obj:`str`, optional): a string representing the color that - should be used to diplay the given symbol - - Returns: - :obj:`str`: A unicode character representing a symbol for the given - ``key``. - """ - output = _symbol.get(key, to_text(":{0}:").format(key)) - if not color: - return output - return stringc(output, color) - - -def iscollection(obj): - """Helper method to check if a given object is not only a Squence, but also - **not** any kind of string. - - Args: - obj (object): The object used on the validation. - - Returns: - bool: True if the object is a collection and False otherwise. - """ - return isinstance(obj, Sequence) and not isinstance(obj, basestring) - - -def stringtruncate( - value, - color="normal", - width=0, - justfn=None, - fillchar=" ", - truncate_placeholder="[...]", -): - """Truncates a giving string using the configuration passed as arguments to - this function. - - Args: - value (:obj:`str` or int): A value to be truncated if it has more - characters than is allowed. - color (:obj:`str`, optional): A string representing a color for Ansible. - If this color is ``None``, no color will be used. Defaults to None. - width (int, optional): The limits of characters allowed for the giving - ``value``. If 0 is given, no truncation happens. Defaults to 0. - justfn (:func:`Callable`, optional): A function to do the justification - of the text. Defaults to :func:`str.rjust` if the type of ``value`` - is integer and :func:`str.ljust` otherwise. - fillchar (:obj:`str`, optional): The character used to fill the space up - to ``width`` after (or before) the ``value`` content. Defaults to - " ". - truncate_placeholder (:obj:`str`, optional): The text used to represents - the truncation. Defaults to "[...]". - - Returns: - The original string truncated to ``width`` and aligned according to - ``justfn``. - """ - if not value: - return fillchar * width - - if not justfn: - justfn = str.rjust if isinstance(value, int) else str.ljust - - if isinstance(value, int): - value = to_text("{:n}").format(value) - - truncsize = len(truncate_placeholder) - do_not_trucate = len(value) <= width or width == 0 - truncated_width = width - truncsize - - return stringc( - to_text(justfn(str(value), width)) - if do_not_trucate - else to_text("{0}{1}".format( - value[:truncated_width] if justfn == str.ljust else truncate_placeholder, - truncate_placeholder if justfn == str.ljust else value[truncated_width:], - )), - color, - ) - - -def dictsum(totals, values): - """Given two dictionaries of ``int`` values, this method will sum the - value in ``totals`` with values in ``values``. - - If a key in ``values`` does not exist in ``totals``, that key will be - added to it, and its initial value will be the same as in ``values``. - - Note: - The type of the keys in the dictionaries are irrelevant, and this - method will re-use anything that is used there. - - Args: - totals (:obj:`dict` of :obj:`object` to int): The total cached - from previous calls of this functions. - values (:obj:`dict` of :obj:`object` to int): The dictionary of - values used to sum up the totals. - - Exemple: - >>> dict1 = {"key1": 10, "key2": 20, "key3": 30} - >>> dict2 = {"key1": 5, "key2": 10, "key3": 15} - >>> dict3 = {"key1": 1, "key2": 2, "key3": 3} - >>> totals = {} - >>> dictsum(totals, dict1) - >>> totals - {"key1": 10, "key2": 20, "key3": 30} - >>> dictsum(totals, dict2) - >>> totals - {"key1": 15, "key2": 30, "key3": 45} - >>> dictsum(totals, dict3) - >>> totals - {"key1": 16, "key2": 32, "key3": 48} - """ - for key, value in values.items(): - if key not in totals: - totals[key] = value - else: - totals[key] += value - - -class CallbackModule(CallbackBase, FileSystemEventHandler): - """The Callback plugin class to produce clean outputs. - - This class handles all Ansible callbacks that generate text on the output. - It follows the new user configuration variables like - :data:`~ansible.constants.DISPLAY_ARGS_TO_STDOUT` and - :data:`~ansible.constants.DISPLAY_SKIPPED_HOSTS`, and it wraps lines at - column ``80`` to make it possible to read the output on any monitor. - - In addition to that, the ``beautiful_output`` plugin implements a crud - version of a Bus to allow other plugins to flush the output when necessary. - - Normally, in order to hide task not executed, the ``beautiful_output`` - plugin will delay printing the task's title until it knows there is anything - to print. On certain conditions, an action plugin can output an information - to the user, and without the Bus mechanism, the action plugin output would - show up before the task title is printed, which would feel like the action - plugin output belongs to the previous task. - - In order to flush the output on these scenarios, a plugin needs to write a - file to a location where the ``beautiful_output`` plugin is observing. At - this point, the Callback plugin will flush any outstanding text, and the - other plugin can proceed with its own task. - - Args: - display (:obj:`ansible.utils.display.Display`, optional): Holds the - display to be used to print outputs with this callback. - - Attributes: - CALLBACK_VERSION (:obj:`decimal`): A class attribute that holds the - last version of Ansible Callback API that can use this plugin. - CALLBACK_TYPE (:obj:`str`): The type of callback this plugin is - implementing. - CALLBACK_NAME (:obj:`str`): The name of this plugin. - BUS_DIR (:obj:`str`): The path where the ``beautiful_stdout`` plugin - will observe for files to trigger a flush. - delegated_vars (:obj:`dict` of :obj:`str` to :obj:`str`): This - dictionaire is used to store the variables used by a task when it - delegated to a different host. Mostly, we only need to know the - host name where our task was delegated to. Defaults to ``None``. - _item_processed (:obj:`bool`): A flag indicating if an item from a task - was already processed and printed. This is to allow us to print a - header before start printin all the items from a task. Defaults to - ``False``. - _current_play (:obj:`~ansible.playbook.play.Play`): This attribute holds - the current play being executed on this playbook. Defaults to - ``None``. - _current_host (:obj:`str`): The host where a task is being executed at - the moment we access this attribute. If this attribute is ``None``, - this means that at this moment there is no task being executed on - any host. Defaults to ``None``. - _task_name_buffer (:obj:`str`): This attribute holds the text that - should be printed when a task is being executed. Defaults to - ``None``. - - See Also: - - :class:`ansible.plugins.callback.CallbackBase` - - :class:`watchdog.events.FileSystemEventHandler` - - `Ansible Callback documentation`_ - - References: - - `Ansible developping plugins documentation`_ - - `Ansible Callback plugins from Ansible Core`_ - - - .. _Ansible Callback documentation: - https://docs.ansible.com/ansible/latest/plugins/callback.html - .. _Ansible developping plugins documentation: - https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#callback-plugins - .. _Ansible Callback plugins from Ansible Core: - https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/callback - """ - - CALLBACK_VERSION = 2.0 - CALLBACK_TYPE = "stdout" - CALLBACK_NAME = "beautiful_output" - BUS_DIR = "%s/beautiful-output-bus" % C.DEFAULT_LOCAL_TMP - - def __init__(self, display=None): - CallbackBase.__init__(self, display) - self.delegated_vars = None - self._item_processed = False - self._current_play = None - self._current_host = None - self._task_name_buffer = None - - def display(self, msg, color=None, stderr=False): - """Helper method to display text on the screen. - - This method is a thin wrapper aroung the real - :meth:`~ansible.utils.display.Display.display` method from the Ansible - :class:`~ansible.utils.display.Display` class. - - Any ``msg`` that is displayed with this method, will be displayed - without any changes on the screen, and will have all the ANSI escape - sequences stripped before displaying it on the logs. - - Args: - msg (:obj:`str`): The message to be displayed. - color (:obj:`str`, optional): A string representing a color on the - Ansible Display system. Defaults to None. - stderr (bool, optional): Flag indicating that the ``msg``should be - displayed on the :data:`stderr` stream. Defaults to False. - """ - self._display.display(msg=msg, color=color, stderr=stderr, screen_only=True) - self._display.display( - msg=ansi_escape.sub("", msg), stderr=stderr, log_only=True - ) - - def v2_playbook_on_start(self, playbook): - """Displays the Playbook report Header when Ansible starst running it. - - The content displayed will depend on the options used to run the - playbook, as well as the options configured in the :file:`ansible.cfg` - file. - - It will always show which playbook it is running and if it is running - in check mode. - - It will display all arguments used to run the given ``playbook` if it - is running in verbose mode (`-vvv`), the ``display_args_to_stdout`` - option in the :file:`ansible.cfg` file, or if the - ``ANSIBLE_DISPLAY_ARGS_TO_STDOUT`` environment variable is set - - It will display a tag line, only if the CLI arguments are **not** - displayed, since the tags used to filters which tasks to run are passed - in the command line as arguments - - Args: - playbook (:obj:`~ansible.playbook.Playbook`): The running playbook. - - See Also: - - :meth:`_display_cli_arguments` - - :meth:`_display_tag_strip` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_start` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - playbook_name = to_text("{0} {1}").format( - symbol(to_text("yaml"), C.COLOR_HIGHLIGHT), - stringc(basename(playbook._file_name), C.COLOR_HIGHLIGHT), - ) - if ( - "check" in context.CLIARGS - and bool(context.CLIARGS["check"]) - and not self._is_run_verbose(verbosity=3) - and not C.DISPLAY_ARGS_TO_STDOUT - ): - playbook_name = to_text("{0} (check mode)").format(playbook_name) - - self.display(to_text("\nExecuting playbook {0}").format(playbook_name)) - - # show CLI arguments - if self._is_run_verbose(verbosity=3) or C.DISPLAY_ARGS_TO_STDOUT: - self._display_cli_arguments() - else: - self._display_tag_strip(playbook) - self.display(to_text("\n")) - - def v2_playbook_on_no_hosts_matched(self): - """Display a warning when there is no hosts available. - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_no_hosts_matched` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self.display( - " %s No hosts found!" % symbol("warning", "bright yellow"), - color=C.COLOR_DEBUG, - ) - - def v2_playbook_on_no_hosts_remaining(self): - """Display an error when one or more hosts that were alive when the - playbook start running are not reachable anymore. - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_no_hosts_remaining` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self.display( - " %s Ran out of hosts!" % symbol("warning", "bright red"), - color=C.COLOR_ERROR, - ) - - def v2_playbook_on_play_start(self, play): - """Displays a banner with the play name and the hosts used in this - play. - - This method might be called multimple times during the execution of a - playbook, and it will not always have the play changed. Due to this - fact, we short-circuit the method to not do anything if the play used - to display the banner is the same as the one used on the last time the - method was called. - - Args: - play (:obj:`~ansible.playbook.play.Play`): the current play being - executed on this playbook. - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_play_start` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - if self._current_play: - self._current_play = play - return - self._current_play = play - name = play.get_name().strip() - if name: - self.display( - to_text("[PLAY: {0}]").format(stringc(name, C.COLOR_HIGHLIGHT)).center(91, "-") - ) - else: - self.display("[PLAY]".center(80, "-")) - - if play.hosts: - self.display("Hosts:") - for host in play.hosts: - self.display(to_text(" - {0}").format(stringc(host, C.COLOR_HIGHLIGHT))) - self.display(to_text("-") * 80) - - def v2_playbook_on_task_start(self, task, is_conditional): - """Displays a title for the giving ``task`. - - Args: - task (:obj:`~ansible.playbook.task.Task`): The task to have its - title printed in the console. - is_conditional: This attribute is ignored in this callback. - - See Also: - :meth:`_display_task_name` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_task_start` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self._display_task_name(task) - - def v2_playbook_on_handler_task_start(self, task): - """Displays a title for the giving ``task`, marking it as a handler - task. - - Args: - task (:obj:`~ansible.playbook.task.Task`): The task to have its - title printed in the console. - - See Also: - :meth:`_display_task_name` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_handler_task_start` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self._display_task_name(task, is_handler=True) - - def v2_runner_retry(self, result): - """Displays the retrying steps Ansible is doing to make the task run - on the host. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the previous attempt to run the task. - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_retry` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - msg = " ️%s Retrying... (%d of %d)" % ( - symbol("retry"), - result._result["attempts"], - result._result["retries"], - ) - if self._is_run_verbose(result, 2): - # All result keys stating with _ansible_ are internal, so remove them from the result before we output anything. - abridged_result = strip_internal_keys( - module_response_deepcopy(result._result) - ) - abridged_result.pop("exception", None) - - if not self._is_run_verbose(verbosity=3): - abridged_result.pop("invocation", None) - abridged_result.pop("diff", None) - - msg += "Result was: %s" % CallbackModule.dump_value(abridged_result) - self.display(msg, color=C.COLOR_DEBUG) - - def v2_runner_on_start(self, host, task): - """Caches the giving ``host`` object to be easily accessible during the - evaluation of a task display. - - Args: - host (:obj:`~ansible.inventory.host.Host`): The host that will run - the giving ``task``. - task (:obj:`~ansible.playbook.task.Task`): The task that will be - ran on the giving ``host``. - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_start` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self._current_host = host - - def v2_runner_on_ok(self, result): - """Displays the result of a task run. - - This method will also be called every time an **item**, on a loop task, - is processed. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`changed_artifacts` - - :meth:`_process_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_ok` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - if self._item_processed: - return - - self._preprocess_result(result) - msg, display_color = CallbackModule.changed_artifacts(result, "ok", C.COLOR_OK) - task_result = self._process_result_output(result, msg, symbol("success")) - self.display(task_result, display_color) - - def v2_runner_on_skipped(self, result): - """If the you configured Ansible to display skipped hosts, this method - will display the task and information that it was skipped. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`_process_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_skipped` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - if C.DISPLAY_SKIPPED_HOSTS: - self._preprocess_result(result) - task_result = self._process_result_output(result, "skipped", symbol("skip")) - self.display(task_result, C.COLOR_SKIP) - pass - else: - self.outlines = [] - - def v2_runner_on_failed(self, result, ignore_errors=False): - """When a task fails, this method is called to display information - about the error. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`_process_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_failed` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - if self._item_processed: - return - - self._preprocess_result(result) - status = "ignored" if ignore_errors else "failed" - color = C.COLOR_SKIP if ignore_errors else C.COLOR_ERROR - task_result = self._process_result_output(result, status, symbol("failure")) - self.display(task_result, color) - - def v2_runner_on_unreachable(self, result): - """When a host becames *unreachable* before the execution of its task, - this method will display information about the unreachability. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`_process_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_unreachable` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self._flush_display_buffer() - task_result = self._process_result_output(result, "unreachable", symbol("dead")) - self.display(task_result, C.COLOR_UNREACHABLE) - - def v2_runner_item_on_ok(self, result): - """Displays the result of an item task run. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`changed_artifacts` - - :meth:`_process_item_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_ok` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self._preprocess_result(result) - status, display_color = CallbackModule.changed_artifacts( - result, "ok", C.COLOR_OK - ) - task_result = self._process_item_result_output( - result, status, symbol("success") - ) - self.display(task_result, display_color) - - def v2_runner_item_on_skipped(self, result): - """If the you configured Ansible to display skipped hosts, this method - will display a task item and information that it was skipped. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`_process_item_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_on_skipped` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - if C.DISPLAY_SKIPPED_HOSTS: - self._preprocess_result(result) - task_result = self._process_item_result_output( - result, "skipped", symbol("skip") - ) - self.display(task_result, C.COLOR_SKIP) - else: - self.outlines = [] - - def v2_runner_item_on_failed(self, result): - """When an intem on a task fails, this method is called to display - information about the failure. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_preprocess_result` - - :meth:`_process_item_result_output` - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_runner_item_on_failed` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self._flush_display_buffer() - task_result = self._process_item_result_output( - result, "failed", symbol("failure") - ) - self.display(task_result, C.COLOR_ERROR) - - def v2_playbook_on_stats(self, stats): - """When the execution of a playbook finishes, this method is called to - display an execution summary. - - It also displays an aggregate total for all executions. - - Note: - Overrides the - :meth:`~ansible.plugins.callback.CallbackBase.v2_playbook_on_stats` - method from the :class:`~ansible.plugins.callback.CallbackBase` - class. - """ - self.display(to_text("{0}\n\n").format("-" * 80)) - totals = { - "ok": 0, - "changed": 0, - "unreachable": 0, - "failures": 0, - "rescued": 0, - "ignored": 0, - } - - self._display_summary_table_row( - ("Hosts", C.COLOR_VERBOSE, 30), - ("Success", C.COLOR_VERBOSE, 7), - ("Changed", C.COLOR_VERBOSE, 7), - ("Dark", C.COLOR_VERBOSE, 7), - ("Failed", C.COLOR_VERBOSE, 7), - ("Rescued", C.COLOR_VERBOSE, 7), - ("Ignored", C.COLOR_VERBOSE, 7), - ) - self._display_summary_table_separator("=") - - hosts = sorted(stats.processed.keys()) - for host_name in hosts: - host_summary = stats.summarize(host_name) - dictsum(totals, host_summary) - self._display_summary_table_row( - (host_name, C.COLOR_HIGHLIGHT, 30), - (host_summary["ok"], C.COLOR_OK, 7), - (host_summary["changed"], C.COLOR_CHANGED, 7), - (host_summary["unreachable"], C.COLOR_UNREACHABLE, 7), - (host_summary["failures"], C.COLOR_ERROR, 7), - (host_summary["rescued"], C.COLOR_OK, 7), - (host_summary["ignored"], C.COLOR_WARN, 7), - ) - - self._display_summary_table_separator("-") - self._display_summary_table_row( - ("Totals", C.COLOR_VERBOSE, 30), - (totals["ok"], C.COLOR_OK, 7), - (totals["changed"], C.COLOR_CHANGED, 7), - (totals["unreachable"], C.COLOR_UNREACHABLE, 7), - (totals["failures"], C.COLOR_ERROR, 7), - (totals["rescued"], C.COLOR_OK, 7), - (totals["ignored"], C.COLOR_WARN, 7), - ) - - def _handle_exception(self, result, use_stderr=False): - """When an exception happen during the execution of a playbook, this - method is called to display information about the crash. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - use_stderr (bool, optional): Flag indicating if this exception - should be printed using the ``stderr`` stream. Defaults to - ``False``. - """ - if "exception" in result: - result["use_stderr"] = use_stderr - msg = "An exception occurred during task execution. " - if not self._is_run_verbose(verbosity=3): - # extract just the actual error message from the exception text - - error = result["exception"].strip().split("\n")[-1] - msg += "To see the full traceback, use -vvv. The error was: %s" % error - elif "module_stderr" in result: - if result["exception"] != result["module_stderr"]: - msg = "The full traceback is:\n" + result["exception"] - del result["exception"] - result["stderr"] = msg - - def _is_run_verbose(self, result=None, verbosity=0): - """Verify if the current run is verbose (should display information) - respecting the given ``verbosity``. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult, optional): - The task result to be considered when checking verbosity. - Defaults to None. - verbosity (int, optional): The verbosity level that this method - will check against. Defaults to 0. - - Returns: - bool: True if the display verbosity cresses the treshold defined by - the argument ``verbosity``, False otherwise. - """ - result = {} if not result else result._result - return ( - self._display.verbosity >= verbosity or "_ansible_verbose_always" in result - ) and "_ansible_verbose_override" not in result - - def _display_cli_arguments(self, indent=2): - """Display all arguments passed to Ansible in the command line. - - Args: - indent (int, optional): Number of spaces to indent the whole - arguments block. Defaults to 2. - """ - if context.CLIARGS.get("args"): - self.display( - to_text("{0}Positional arguments: {1}").format( - " " * indent, ", ".join(context.CLIARGS["args"]) - ), - color=C.COLOR_VERBOSE, - ) - - for arg, val in { - key: value - for key, value in context.CLIARGS.items() - if key != "args" and value - }.items(): - if iscollection(val): - self.display(to_text("{0}{1}:").format(" " * indent, arg), color=C.COLOR_VERBOSE) - for v in val: - self.display( - to_text("{0}- {1}").format(" " * (indent + 2), v), color=C.COLOR_VERBOSE - ) - else: - self.display( - to_text("{0}{1}: {2}").format(" " * indent, arg, val), color=C.COLOR_VERBOSE - ) - - def _get_tags(self, playbook): - """Returns a collection of tags that will be associated with all tasks - runnin during this session. - - This means that it will collect all the tags available in the giving - ``playbook``, and filter against the tags passed to Ansible in the - command line. - - Args: - playbook (:obj:`~ansible.playbook.Playbook`): The playbook where to - look for tags. - - Returns: - :obj:`list` of :obj:`str`: A sorted list of all tags used in this - run. - """ - tags = set() - for play in playbook.get_plays(): - for block in play.compile(): - blocks = block.filter_tagged_tasks({}) - if blocks.has_tasks(): - for task in blocks.block: - tags.update(task.tags) - if "tags" in context.CLIARGS: - requested_tags = set(context.CLIARGS["tags"]) - else: - requested_tags = {"all"} - if len(requested_tags) > 1 or next(iter(requested_tags)) != "all": - tags = tags.intersection(requested_tags) - return sorted(tags) - - def _display_tag_strip(self, playbook, width=80): - """Displays a line of tags present in the given ``playbook`` - intersected with the tags given to Ansible in the command line. - - If the line is bigger than ``width`` characters, it will wrap the tag - line before it cross the treshold. - - To make the tag line be more aesthetic pleasant, it will be displayed - with a blank line before and after each line used. - - Args: - playbook (:obj:`~ansible.playbook.Playbook`): The playbook where to - look for tags. - width (int): How many characters can be used in a single line. - Defaults to 80. - """ - tags = self._get_tags(playbook) - tag_strings = "" - total_len = 0 - first_item = True - for tag in sorted(tags): - if not first_item: - if total_len + len(tag) + 5 > width: - tag_strings += to_text("\n\n {0} {1} {2} {3}").format( - "\x1b[6;30;47m", symbol("flag"), tag, "\x1b[0m" - ) - total_len = len(tag) + 6 - first_item = True - else: - tag_strings += to_text(" {0} {1} {2} {3}").format( - "\x1b[6;30;47m", symbol("flag"), tag, "\x1b[0m" - ) - total_len += len(tag) + 5 - else: - first_item = False - tag_strings += to_text(" {0} {1} {2} {3}").format( - "\x1b[6;30;47m", symbol("flag"), tag, "\x1b[0m" - ) - total_len = len(tag) + 6 - self.display("\n") - self.display(tag_strings) - - def _get_task_display_name(self, task): - """Caches the giving ``task`` name if it is not an include task. - - Args: - task (:obj:`~ansible.playbook.task.Task`): The task object that - will be analyzed. - """ - self.task_display_name = None - display_name = task.get_name().strip().split(" : ") - - task_display_name = display_name[-1] - if task_display_name.startswith("include"): - return - else: - self.task_display_name = task_display_name - - def _preprocess_result(self, result): - """Check the result object for errors or warning. It also make sure - that the task title buffer is flushed and displayed to the user. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - - See Also: - - :meth:`_flush_display_buffer` - - :meth:`_handle_exception` - - :meth:`_handle_warnings` - """ - self.delegated_vars = result._result.get("_ansible_delegated_vars", None) - self._flush_display_buffer() - self._handle_exception(result._result) - self._handle_warnings(result._result) - - def _get_host_string(self, result, prefix=""): - """Retrieve the host from the giving ``result``. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - prefix (:obj:`str`, optional): A prefix added to the host name. - Defaults to "". - - Returns: - A formatted version of the host that generated the ``result``. - """ - task_host = to_text("{0}{1}").format(prefix, result._host.get_name()) - if self.delegated_vars: - task_host += to_text(" {0} {1}{2}").format( - symbol("arrow_right"), prefix, self.delegated_vars["ansible_host"] - ) - return task_host - - def _process_result_output(self, result, status, symbol_char="", indent=2): - """Returns the result converted to string. - - Each key in the ``result._result`` is considered a session for the - purpose of this method. All sessions have their content indented related - to the session title. - - If a session verbosity (found on the :const:`_session_order` dictionary) - doesnot cross the treshold for this playbook, it will not be shown. - - This method also converts all session titles that are present in the - :const:`` dictionary, to their string representation. The rest of the - titles are simply capitalized for aestetics purpose. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - status (:obj:`str`): The status representing this ourput (e.g. "ok", - "changed", "failed"). - symbol_char (:obj:`str`, optional): An UTF-8 character to be used as - a symbol_char in the beginning of the output. Defaults to "". - indent (int, optional): How many character the text generated from - the ``result`` should be indended to. Defaults to 2. - - Returns: - :obj:`str`: A formated version of the giving ``result``. - """ - task_host = self._get_host_string(result) - - task_result = to_text("{0}{1}{2} [{3}]").format( - " " * indent, - symbol_char + " " if symbol_char else "", - task_host, - status.upper(), - ) - - for key, verbosity in _session_order.items(): - if ( - key in result._result - and result._result[key] - and self._is_run_verbose(result, verbosity) - ): - task_result += self.reindent_session( - _session_title.get(key, key), result._result[key], indent + 2 - ) - - for title, text in result._result.items(): - if title not in _session_title and text and self._is_run_verbose(result, 2): - task_result += self.reindent_session( - title.replace("_", " ").replace(".", " ").capitalize(), - text, - indent + 2, - ) - - return task_result - - def _process_item_result_output(self, result, status, symbol_char="", indent=2): - """Displays the given ``result`` of an item task. - - This method is a simplified version of the - :meth:`_process_result_output` method where no sessions are printed. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - status (:obj:`str`): The status representing this ourput (e.g. "ok", - "changed", "failed"). - symbol_char (:obj:`str`, optional): An UTF-8 character to be used as - a symbol_char in the beginning of the output. Defaults to "". - indent (int, optional): How many character the text generated from - the ``result`` should be indended to. Defaults to 2. - - Returns: - :obj:`str`: A formated version of the giving ``result``. - """ - if not self._item_processed: - self._item_processed = True - self.display(to_text("{0}{1} Items:").format(" " * indent, symbol("loop"))) - - item_name = self._get_item_label(result._result) - if isinstance(item_name, dict): - if "name" in item_name: - item_name = item_name.get("name") - elif "path" in item_name: - item_name = item_name.get("path") - else: - item_name = u'JSON: "{0}"'.format( - stringtruncate( - json.dumps(item_name, separators=(",", ":")), width=36 - ) - ) - task_host = self._get_host_string(result, "@") - task_result = to_text("{0}{1} {2} ({3}) [{4}]").format( - " " * (indent + 2), symbol_char, item_name, task_host, status.upper() - ) - return task_result - - def _display_summary_table_separator(self, symbol_char): - """Displays a line separating header or footer from content on the - summary table. - - Args: - symbol_char (:obj:`str`): The character to be used as the separator. - """ - self.display( - to_text(" {0} {1} {2} {3} {4} {5} {6}").format( - symbol_char * 30, - symbol_char * 7, - symbol_char * 7, - symbol_char * 7, - symbol_char * 7, - symbol_char * 7, - symbol_char * 7, - ) - ) - - def _display_summary_table_row( - self, host, success, changed, dark, failed, rescued, ignored - ): - """Displays a single line in the summary table, respecting the color and - size given in the arguments. - - Each argument in this method is a tuple of three values: - - - The text; - - The color; - - The width; - - Args: - host (:obj:`tuple` of :obj:`str`, :obj:`str`, int): Which host this - row is representing. - success (:obj:`tuple` of :obj:`str`, :obj:`str`, int): How many - tasks were run successfully. - changed (:obj:`tuple` of :obj:`str`, :obj:`str`, int): How many - values were changed due to the execution of the task. - dark (:obj:`tuple` of :obj:`str`, :obj:`str`, int): How many hosts - were not reachable during the execution of this playbook. - failed (:obj:`tuple` of :obj:`str`, :obj:`str`, int): How many tasks - failed during their execution. - rescued (:obj:`tuple` of :obj:`str`, :obj:`str`, int): How manu - tasks where recover from a failure and were able to complete - successfully. - ignored (:obj:`tuple` of :obj:`str`, :obj:`str`, int): How many - tasks were ignored. - """ - self.display( - to_text(" {0} {1} {2} {3} {4} {5} {6}").format( - stringtruncate(host[0], host[1], host[2]), - stringtruncate(success[0], success[1], success[2]), - stringtruncate(changed[0], changed[1], changed[2]), - stringtruncate(dark[0], dark[1], dark[2]), - stringtruncate(failed[0], failed[1], failed[2]), - stringtruncate(rescued[0], rescued[1], rescued[2]), - stringtruncate(ignored[0], ignored[1], ignored[2]), - ) - ) - - def _display_task_decision_score(self, task): - """Calculate the probability for the giving ``task`` to be displayed - based on configurations and the task ``when`` clause. - - Args: - task (:obj:`~ansible.playbook.task.Task`): The task object that - will be analyzed. - - Returns: - :obj:`Number`: A number between 0 and 1 representing the - probability to show the giving ``task``. Currently this method - only return 3 possible values: - - :0.0: - When we are sure that the task should **not** be displayed. - This means that we were able to process the ``when`` clause and - it returned ``False``, or this ``task`` is a debug task and its - verbosity does **not** cross the trashold for our playbook. - :1.0: - When we are sure the ``task`` should be displayed. This means - that we were able to process the ``when`` clause and it returned - ``True``, or this ``task`` is a debug task and its verbosity - does cross the trashold for our playbook. - :0.5: - When we don't know if this task should be displayed or not. By - default, we associate any ``task`` with this score, and change - it if one of the conditions for the other scores are met. - """ - score = 0.5 - var_manager = task.get_variable_manager() - task_args = task.args - if task.when and var_manager: - all_hosts = CallbackModule.get_chainned_value( - var_manager.get_vars(), "hostvars" - ) - play_task_vars = var_manager.get_vars( - play=self._current_play, host=self._current_host, task=task - ) - templar = Templar(task._loader, variables=play_task_vars) - exception = False - for hostname in all_hosts.keys(): - host_vars = CallbackModule.get_chainned_value(all_hosts, hostname) - host_vars.update(play_task_vars) - try: - if not task.evaluate_conditional(templar, host_vars): - score = 0.0 - break - except Exception as e: - exception = True - else: - if not exception: - score = 1.0 - elif task.action == "debug" and task_args and "verbosity" in task_args: - score = ( - 1.0 - if self._is_run_verbose(verbosity=int(task_args["verbosity"])) - else 0.0 - ) - return score - - def _display_task_name(self, task, is_handler=False): - """Displays the giving ``task`` title. - - In reality, this method may or may not display the title based on some - factors: - - If the :file:`ansible.cfg` has the ``display_skipped_hosts`` option set - to ``True``, or if either of the environment variables - (``ANSIBLE_DISPLAY_SKIPPED_HOSTS``, and ``DISPLAY_SKIPPED_HOSTS``) are - set, the ``task`` title is displayed as soon as this method is called. - - Otherwise, this method will *cache* the ``task`` title until the - :meth:`_flush_display_buffer` is called. - - Args: - task (:obj:`~ansible.playbook.task.Task`): The task object that - will be displayed in the console. - is_handler (bool, optional): Flag indicating if this task is being - handled by a different host. Defaults to False. - - See Also: - - :meth:`_get_task_display_name` - - :meth:`_display_task_decision_score` - - :meth:`_flush_display_buffer` - """ - self._item_processed = False - self._get_task_display_name(task) - - if self.task_display_name: - self._task_name_buffer = ( - self.task_display_name - if not is_handler - else "%s (via handler)..." % self.task_display_name - ) - - display_score = self._display_task_decision_score(task) - if display_score >= 1.0 or C.DISPLAY_SKIPPED_HOSTS: - self._flush_display_buffer() - elif display_score < 0.1: - self._task_name_buffer = None - - def _flush_display_buffer(self): - """Display a task title if there is one to display. - """ - if self._task_name_buffer: - self.display(self._task_name_buffer) - self._task_name_buffer = None - - @staticmethod - def try_parse_string(text): - """This method will try to parse the giving ``text`` using a JSON and - a YAML parser in order to return a dictionary representing this parsed - structure. - - Args: - text (:obj:`str`): A text that may or may not be a JSON or YAML - content. - - Returns: - Returns the parser object from ``text``. If the giving ``text`` was - not a JSON or YAML content, ``None`` will be returned. - """ - textobj = None - - try: - textobj = json.loads(text) - except Exception as e: - try: - textobj = yaml.load(text, Loader=yaml.SafeLoader) - except Exception: - pass - - return textobj - - @staticmethod - def dump_value(value): - """Given a string, this method will parse the giving string and return - the parsed object converted to a YAML representation. - - Args: - value (:obj:`str`): A string to be parsed. - - Returns: - :obj:`str`: The YAML representation of the object parsed from the - giving ``value``. - """ - text = None - obj = CallbackModule.try_parse_string(value) - if obj: - text = yaml.dump(obj, Dumper=yaml.SafeDumper, default_flow_style=False) - return text - - @staticmethod - def reindent_session(title, text, indent=2, width=80): - """This method returns a text formatted with the giving ``indent`` and - wrapped at the giving ``width``. - - Args: - title (:obj:`str`): The left most indented text. - text (:obj:`str`): The rest of the text that will be indented two - characters to the left of the ``title`` indentation. - indent (int): Number of spaces used to indent the whole block. - Defaults to 2. - width (int, optional): How many characters are allowed to be used - on a single line for this text block. Defaults to 80. - - Returns: - :obj:`str`: The formatted text. - """ - titleindent = " " * indent - textindent = " " * (indent + 2) - textwidth = width - (indent + len(title) + 2) - textstr = str(text).strip() - dumped = False - if textstr.startswith("---") or textstr.startswith("{"): - dumped = CallbackModule.dump_value(textstr) - textstr = dumped if dumped else textstr - output = to_text("\n{0}{1}:").format(titleindent, title) - lines = textstr.splitlines() - - if (len(lines) == 1) and (len(textstr) <= textwidth) and (not dumped): - output += " %s" % textstr - else: - for line in lines: - output += "\n%s" % textwrap.fill( - text=line, - width=width, - initial_indent=textindent, - subsequent_indent=textindent, - ) - return output - - @staticmethod - def changed_artifacts(result, status, display_color): - """Detect if the given ``result`` did change anything during its - execution and return the proper status and display color for it. - - Args: - result (:obj:`~ansible.executor.task_result.TaskResult`): The result - object representing the execution of a task. - status (:obj:`str`): A string representing the current status of - the giving ``result``. - display_color (:obj:`str`): A string representing the current status - color of the giving ``result``. - - Returns: - :obj:`tuple` of :obj:`str`, :obj:`str`: The return value depends on - the giving ``result`` object. If this method detects the ``changed`` - flag in the ``result`` object, it returns:: - - ("changed", "yellow") - - Otherwise, the values passed in the ``status`` and ``display_color`` - arguments will be used:: - - (status, display_color) - """ - result_was_changed = "changed" in result._result and result._result["changed"] - if result_was_changed: - return "changed", C.COLOR_CHANGED - return status, display_color - - @staticmethod - def get_chainned_value(mapping, *args): - """Returns a value from a dictionary. - - It can return chainned values based on a list of keys giving by the - ``args`` argument. - - Example: - >>> crazy_dict = { - ... "a_key": "a_value", - ... "dict_key": { - ... "other_key": "other_value", - ... "other_dict_key": { - ... "target_value": "Found It!" - ... } - ... } - ... } - >>> CallbackModule.get_chainned_value(crazy_dict, "dict_key", "other_dict_key", "target_value") - 'Found It!' - - Args: - mapping (:obj:`dict`): The dictionary used to fetch a value using - chainned calls. - *args: A list of keys to use to retrieve the deep value in the - giving dictionary. - - Returns: - Returns any value that matches the chain of keys passed in the - ``args`` argument. If this value is a dictionary of some sort, the - values of this dictionary will be shallowed copied to the returned - dictionary. - """ - if args: - key = args[0] - others = args[1:] - - if key in mapping: - value = mapping[key] - if others: - return CallbackModule.get_chainned_value(value, *others) - if isinstance(value, Mapping): - dict_value = {} - dict_value.update(value) - return dict_value - return value - return None diff --git a/roles/bash/files/.bashrc b/dot_bashrc similarity index 64% rename from roles/bash/files/.bashrc rename to dot_bashrc index 6a11c23..e857dee 100644 --- a/roles/bash/files/.bashrc +++ b/dot_bashrc @@ -23,20 +23,22 @@ function ya() { ## Aliases # Replace ls with eza -alias ls='eza -al --color=always --group-directories-first' # preferred listing -alias la='eza -a --color=always --group-directories-first' # all files and dirs -alias ll='eza -l --color=always --group-directories-first' # long format -alias lt='eza -aT --color=always --group-directories-first' # tree listing -alias l.='eza -ald --color=always --group-directories-first .*' # show only dotfiles +if [ -f /usr/bin/eza ]; then + alias ls='eza -al --color=always --group-directories-first --icons=auto' # preferred listing + alias la='eza -a --color=always --group-directories-first --icons=auto' # all files and dirs + alias ll='eza -l --color=always --group-directories-first --icons=auto' # long format + alias lt='eza -aT --color=always --group-directories-first --icons=auto' # tree listing + alias l.='eza -ald --color=always --group-directories-first --icons=auto .*' # show only dotfiles +fi # Replace cat with bat if [ -f /usr/bin/bat ]; then alias cat='bat --style header --style snip --style changes --style header' fi -# Replace yay with paru -if [ -f /usr/bin/paru ]; then - alias yay='paru' +# Replace paru with yay +if [ -f /usr/bin/yay ]; then + alias paru='yay' fi # Aliases @@ -56,12 +58,14 @@ alias rmpkg="sudo pacman -Rdd" alias tarnow='tar -acf ' alias untar='tar -zxvf ' alias wget='wget -c ' - # Cleanup orphaned packages alias cleanup='sudo pacman -Rns `pacman -Qtdq`' - # Get the error messages from journalctl alias jctl="journalctl -p 3 -xb" - # Recent installed packages -alias rip="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl" +alias ripp="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl" + + +if [ -f /usr/bin/fastfetch ]; then + fastfetch +fi diff --git a/roles/fish/files/config.fish b/dot_config/fish/config.fish similarity index 94% rename from roles/fish/files/config.fish rename to dot_config/fish/config.fish index 94930c9..709bfbf 100644 --- a/roles/fish/files/config.fish +++ b/dot_config/fish/config.fish @@ -21,7 +21,7 @@ if test -d ~/.local/bin end end -# Add ~/go/bin to PATH +# Add ~/go to PATH if test -d ~/go/bin if not contains -- ~/go/bin $PATH set -p PATH ~/go/bin @@ -29,10 +29,6 @@ if test -d ~/go/bin end ## Plugin configuration -# Set settings for https://github.com/franciscolourenco/done -set -U __done_min_cmd_duration 10000 -set -U __done_notification_urgency_level low - # Starship prompt if type -q starship && status --is-interactive starship init fish | source @@ -141,11 +137,11 @@ end ## Aliases # Replace ls with eza if type -q eza - alias ls='eza -al --color=always --group-directories-first --icons' # preferred listing - alias la='eza -a --color=always --group-directories-first --icons' # all files and dirs - alias ll='eza -l --color=always --group-directories-first --icons' # long format - alias lt='eza -aT --color=always --group-directories-first --icons' # tree listing - alias l.='eza -ald --color=always --group-directories-first --icons .*' # show only dotfiles + alias ls='eza -al --color=always --group-directories-first --icons=auto' # preferred listing + alias la='eza -a --color=always --group-directories-first --icons=auto' # all files and dirs + alias ll='eza -l --color=always --group-directories-first --icons=auto' # long format + alias lt='eza -aT --color=always --group-directories-first --icons=auto' # tree listing + alias l.='eza -ald --color=always --group-directories-first --icons=auto .*' # show only dotfiles end # Replace cat with bat diff --git a/dot_config/hypr/dms/binds-user.lua b/dot_config/hypr/dms/binds-user.lua new file mode 100644 index 0000000..cbad4c9 --- /dev/null +++ b/dot_config/hypr/dms/binds-user.lua @@ -0,0 +1,38 @@ +-- DMS user keybind overrides (edit via Control Center or dms; do not remove this header) + +hl.unbind("CTRL + SHIFT + Escape") +hl.bind("CTRL + SHIFT + Escape", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle"), { description = "dms ipc call processlist focusOrToggle" }) +hl.unbind("SUPER + CTRL + S") +hl.bind("SUPER + CTRL + S", hl.dsp.exec_cmd("dms ipc call quickCapture screenshot window edit"), { description = "screenshot window" }) +hl.unbind("SUPER + I") +hl.bind("SUPER + I", hl.dsp.exec_cmd("dms ipc notifications toggle"), { description = "notification toggle" }) +hl.unbind("SUPER + N") +hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notepad toggle"), { description = "dms ipc call notepad toggle" }) +hl.unbind("SUPER + O") +hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call lock lock"), { description = "dms ipc call lock lock" }) +hl.unbind("SUPER + SHIFT + B") +hl.bind("SUPER + SHIFT + B", hl.dsp.exec_cmd("dms ipc call mpris previous"), { locked = true, description = "dms ipc call mpris previous" }) +hl.unbind("SUPER + SHIFT + N") +hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call mpris next"), { locked = true, description = "dms ipc call mpris next" }) +hl.unbind("SUPER + SHIFT + P") +hl.bind("SUPER + SHIFT + P", hl.dsp.exec_cmd("dms ipc call mpris playPause"), { locked = true, description = "dms ipc call mpris playPause" }) +hl.unbind("SUPER + SHIFT + S") +hl.bind("SUPER + SHIFT + S", hl.dsp.exec_cmd("dms ipc call quickCapture screenshot region edit"), { description = "screenshot region" }) +hl.unbind("SUPER + SHIFT + T") +hl.bind("SUPER + SHIFT + T", hl.dsp.exec_cmd("dms ipc call timer toggle"), { description = "timer toggle" }) +hl.unbind("SUPER + B") +hl.bind("SUPER + B", hl.dsp.exec_cmd("brave")) +hl.unbind("SUPER + E") +hl.bind("SUPER + E", hl.dsp.exec_cmd("thunar")) +hl.unbind("SUPER + SHIFT + O") +hl.bind("SUPER + SHIFT + O", hl.dsp.dpms({ action = "toggle" }), { description = "dpms toggle" }) +hl.unbind("CTRL + ALT + Delete") +hl.unbind("CTRL + SHIFT + T") +hl.unbind("SUPER + C") +hl.bind("SUPER + C", hl.dsp.window.close(), { description = "Close window" }) +hl.unbind("SUPER + CTRL + F") +hl.unbind("SUPER + F") +hl.bind("SUPER + F", hl.dsp.window.float({ action = "toggle" }), { description = "Float/unfloat window" }) +hl.unbind("SUPER + M") +hl.bind("SUPER + M", hl.dsp.window.fullscreen({ mode = "maximized", action = "toggle" }), { description = "Toggle maximization" }) +hl.unbind("SUPER + Q") diff --git a/dot_config/hypr/dms/binds.lua b/dot_config/hypr/dms/binds.lua new file mode 100644 index 0000000..958d882 --- /dev/null +++ b/dot_config/hypr/dms/binds.lua @@ -0,0 +1,171 @@ +-- DMS default keybinds (Hyprland 0.55+ Lua) + +-- === Application Launchers === +hl.bind("SUPER + T", hl.dsp.exec_cmd("ghostty")) +hl.bind("SUPER + space", hl.dsp.exec_cmd("dms ipc call spotlight toggle")) +hl.bind("ALT + space", hl.dsp.exec_cmd("dms ipc call spotlight-bar toggle")) +hl.bind("SUPER + V", hl.dsp.exec_cmd("dms ipc call clipboard toggle")) +hl.bind("SUPER + M", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle")) +hl.bind("SUPER + comma", hl.dsp.exec_cmd("dms ipc call settings focusOrToggle")) +hl.bind("SUPER + N", hl.dsp.exec_cmd("dms ipc call notifications toggle")) +hl.bind("SUPER + SHIFT + N", hl.dsp.exec_cmd("dms ipc call notepad toggle")) +hl.bind("SUPER + Y", hl.dsp.exec_cmd("dms ipc call dash toggle wallpaper")) +hl.bind("SUPER + TAB", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview")) +hl.bind("SUPER + O", hl.dsp.exec_cmd("dms ipc call hypr toggleOverview")) +hl.bind("SUPER + X", hl.dsp.exec_cmd("dms ipc call powermenu toggle")) + +-- === Cheat sheet +hl.bind("SUPER + SHIFT + Slash", hl.dsp.exec_cmd("dms ipc call keybinds toggle hyprland")) + +-- === Security === +hl.bind("SUPER + ALT + L", hl.dsp.exec_cmd("dms ipc call lock lock")) +hl.bind("SUPER + SHIFT + E", hl.dsp.exit()) +hl.bind("CTRL + ALT + Delete", hl.dsp.exec_cmd("dms ipc call processlist focusOrToggle")) + +-- === Audio Controls === +hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("dms ipc call audio increment 3"), { locked = true, repeating = true }) +hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("dms ipc call audio decrement 3"), { locked = true, repeating = true }) +hl.bind("XF86AudioMute", hl.dsp.exec_cmd("dms ipc call audio mute"), { locked = true }) +hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("dms ipc call audio micmute"), { locked = true }) +hl.bind("XF86AudioPause", hl.dsp.exec_cmd("dms ipc call mpris playPause"), { locked = true }) +hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("dms ipc call mpris playPause"), { locked = true }) +hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("dms ipc call mpris previous"), { locked = true }) +hl.bind("XF86AudioNext", hl.dsp.exec_cmd("dms ipc call mpris next"), { locked = true }) +hl.bind("CTRL + XF86AudioRaiseVolume", hl.dsp.exec_cmd("dms ipc call mpris increment 3"), { locked = true, repeating = true }) +hl.bind("CTRL + XF86AudioLowerVolume", hl.dsp.exec_cmd("dms ipc call mpris decrement 3"), { locked = true, repeating = true }) + +-- === Brightness Controls === +hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd([[dms ipc call brightness increment 5 ""]]), { locked = true, repeating = true }) +hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd([[dms ipc call brightness decrement 5 ""]]), { locked = true, repeating = true }) + +-- === Window Management === +hl.bind("SUPER + Q", hl.dsp.window.close()) +hl.bind("SUPER + F", hl.dsp.window.fullscreen({ mode = "maximized", action = "toggle" })) +hl.bind("SUPER + SHIFT + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" })) +hl.bind("SUPER + SHIFT + T", hl.dsp.window.float({ action = "toggle" })) +hl.bind("SUPER + W", hl.dsp.group.toggle()) +hl.bind("SUPER + SHIFT + W", hl.dsp.exec_cmd("dms ipc call window-rules toggle")) + +-- === Focus Navigation === +hl.bind("SUPER + left", hl.dsp.focus({ direction = "l" })) +hl.bind("SUPER + down", hl.dsp.focus({ direction = "d" })) +hl.bind("SUPER + up", hl.dsp.focus({ direction = "u" })) +hl.bind("SUPER + right", hl.dsp.focus({ direction = "r" })) +hl.bind("SUPER + H", hl.dsp.focus({ direction = "l" })) +hl.bind("SUPER + J", hl.dsp.focus({ direction = "d" })) +hl.bind("SUPER + K", hl.dsp.focus({ direction = "u" })) +hl.bind("SUPER + L", hl.dsp.focus({ direction = "r" })) + +-- === Window Movement === +hl.bind("SUPER + SHIFT + left", hl.dsp.window.move({ direction = "l" })) +hl.bind("SUPER + SHIFT + down", hl.dsp.window.move({ direction = "d" })) +hl.bind("SUPER + SHIFT + up", hl.dsp.window.move({ direction = "u" })) +hl.bind("SUPER + SHIFT + right", hl.dsp.window.move({ direction = "r" })) +hl.bind("SUPER + SHIFT + H", hl.dsp.window.move({ direction = "l" })) +hl.bind("SUPER + SHIFT + J", hl.dsp.window.move({ direction = "d" })) +hl.bind("SUPER + SHIFT + K", hl.dsp.window.move({ direction = "u" })) +hl.bind("SUPER + SHIFT + L", hl.dsp.window.move({ direction = "r" })) + +-- === Column Navigation === +hl.bind("SUPER + Home", hl.dsp.focus({ window = "first" })) +hl.bind("SUPER + End", hl.dsp.focus({ window = "last" })) + +-- === Monitor Navigation === +hl.bind("SUPER + CTRL + left", hl.dsp.focus({ monitor = "l" })) +hl.bind("SUPER + CTRL + right", hl.dsp.focus({ monitor = "r" })) +hl.bind("SUPER + CTRL + H", hl.dsp.focus({ monitor = "l" })) +hl.bind("SUPER + CTRL + J", hl.dsp.focus({ monitor = "d" })) +hl.bind("SUPER + CTRL + K", hl.dsp.focus({ monitor = "u" })) +hl.bind("SUPER + CTRL + L", hl.dsp.focus({ monitor = "r" })) + +-- === Move to Monitor === +hl.bind("SUPER + SHIFT + CTRL + left", hl.dsp.window.move({ monitor = "l" })) +hl.bind("SUPER + SHIFT + CTRL + down", hl.dsp.window.move({ monitor = "d" })) +hl.bind("SUPER + SHIFT + CTRL + up", hl.dsp.window.move({ monitor = "u" })) +hl.bind("SUPER + SHIFT + CTRL + right", hl.dsp.window.move({ monitor = "r" })) +hl.bind("SUPER + SHIFT + CTRL + H", hl.dsp.window.move({ monitor = "l" })) +hl.bind("SUPER + SHIFT + CTRL + J", hl.dsp.window.move({ monitor = "d" })) +hl.bind("SUPER + SHIFT + CTRL + K", hl.dsp.window.move({ monitor = "u" })) +hl.bind("SUPER + SHIFT + CTRL + L", hl.dsp.window.move({ monitor = "r" })) + +-- === Workspace Navigation === +hl.bind("SUPER + Page_Down", hl.dsp.focus({ workspace = "e+1" })) +hl.bind("SUPER + Page_Up", hl.dsp.focus({ workspace = "e-1" })) +hl.bind("SUPER + U", hl.dsp.focus({ workspace = "e+1" })) +hl.bind("SUPER + I", hl.dsp.focus({ workspace = "e-1" })) +hl.bind("SUPER + CTRL + down", hl.dsp.window.move({ workspace = "e+1" })) +hl.bind("SUPER + CTRL + up", hl.dsp.window.move({ workspace = "e-1" })) +hl.bind("SUPER + CTRL + U", hl.dsp.window.move({ workspace = "e+1" })) +hl.bind("SUPER + CTRL + I", hl.dsp.window.move({ workspace = "e-1" })) + +-- === Workspace Management === +hl.bind("CTRL + SHIFT + R", hl.dsp.exec_cmd("dms ipc call workspace-rename open")) + +-- === Move Workspaces === +hl.bind("SUPER + SHIFT + Page_Down", hl.dsp.window.move({ workspace = "e+1" })) +hl.bind("SUPER + SHIFT + Page_Up", hl.dsp.window.move({ workspace = "e-1" })) +hl.bind("SUPER + SHIFT + U", hl.dsp.window.move({ workspace = "e+1" })) +hl.bind("SUPER + SHIFT + I", hl.dsp.window.move({ workspace = "e-1" })) + +-- === Mouse Wheel Navigation === +hl.bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e+1" })) +hl.bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e-1" })) +hl.bind("SUPER + CTRL + mouse_down", hl.dsp.window.move({ workspace = "e+1" })) +hl.bind("SUPER + CTRL + mouse_up", hl.dsp.window.move({ workspace = "e-1" })) + +-- === Touchpad Gestures === +hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" }) + +-- === Numbered Workspaces === +hl.bind("SUPER + 1", hl.dsp.focus({ workspace = "1" })) +hl.bind("SUPER + 2", hl.dsp.focus({ workspace = "2" })) +hl.bind("SUPER + 3", hl.dsp.focus({ workspace = "3" })) +hl.bind("SUPER + 4", hl.dsp.focus({ workspace = "4" })) +hl.bind("SUPER + 5", hl.dsp.focus({ workspace = "5" })) +hl.bind("SUPER + 6", hl.dsp.focus({ workspace = "6" })) +hl.bind("SUPER + 7", hl.dsp.focus({ workspace = "7" })) +hl.bind("SUPER + 8", hl.dsp.focus({ workspace = "8" })) +hl.bind("SUPER + 9", hl.dsp.focus({ workspace = "9" })) + +-- === Move to Numbered Workspaces === +hl.bind("SUPER + SHIFT + 1", hl.dsp.window.move({ workspace = "1" })) +hl.bind("SUPER + SHIFT + 2", hl.dsp.window.move({ workspace = "2" })) +hl.bind("SUPER + SHIFT + 3", hl.dsp.window.move({ workspace = "3" })) +hl.bind("SUPER + SHIFT + 4", hl.dsp.window.move({ workspace = "4" })) +hl.bind("SUPER + SHIFT + 5", hl.dsp.window.move({ workspace = "5" })) +hl.bind("SUPER + SHIFT + 6", hl.dsp.window.move({ workspace = "6" })) +hl.bind("SUPER + SHIFT + 7", hl.dsp.window.move({ workspace = "7" })) +hl.bind("SUPER + SHIFT + 8", hl.dsp.window.move({ workspace = "8" })) +hl.bind("SUPER + SHIFT + 9", hl.dsp.window.move({ workspace = "9" })) + +-- === Column Management === +hl.bind("SUPER + bracketleft", hl.dsp.layout("preselect l")) +hl.bind("SUPER + bracketright", hl.dsp.layout("preselect r")) + +-- === Sizing & Layout === +hl.bind("SUPER + R", hl.dsp.layout("togglesplit")) +hl.bind("SUPER + CTRL + F", hl.dsp.window.fullscreen({ mode = "maximized", action = "set" })) + +-- === Move/resize windows with mainMod + LMB/RMB and dragging === +hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true, description = "Move window" }) +hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true, description = "Resize window" }) + +hl.bind("SUPER + code:20", hl.dsp.window.resize({ x = -100, y = 0, relative = true }), { description = "Expand window left" }) +hl.bind("SUPER + code:21", hl.dsp.window.resize({ x = 100, y = 0, relative = true }), { description = "Shrink window left" }) + +-- === Manual Sizing === +hl.bind("SUPER + minus", hl.dsp.window.resize({ x = -100, y = 0, relative = true }), { repeating = true }) +hl.bind("SUPER + equal", hl.dsp.window.resize({ x = 100, y = 0, relative = true }), { repeating = true }) +hl.bind("SUPER + SHIFT + minus", hl.dsp.window.resize({ x = 0, y = -100, relative = true }), { repeating = true }) +hl.bind("SUPER + SHIFT + equal", hl.dsp.window.resize({ x = 0, y = 100, relative = true }), { repeating = true }) + +-- === Screenshots === +hl.bind("Print", hl.dsp.exec_cmd("dms screenshot")) +hl.bind("CTRL + Print", hl.dsp.exec_cmd("dms screenshot full")) +hl.bind("ALT + Print", hl.dsp.exec_cmd("dms screenshot window")) + +-- === Display Profiles === +hl.bind("SUPER + P", hl.dsp.exec_cmd("dms ipc outputs cycleProfile")) + +-- === System Controls === +hl.bind("SUPER + SHIFT + P", hl.dsp.dpms({ action = "toggle" })) diff --git a/dot_config/hypr/dms/colors.lua b/dot_config/hypr/dms/colors.lua new file mode 100644 index 0000000..e4b20b7 --- /dev/null +++ b/dot_config/hypr/dms/colors.lua @@ -0,0 +1,27 @@ +-- Auto-generated by DMS Matugen hook — do not edit manually. +-- Remove require("dms.colors") from hyprland.lua to override. + +hl.config({ + general = { + col = { + active_border = "rgb(9fd49b)", + inactive_border = "rgb(8c9388)", + }, + }, + group = { + col = { + border_active = "rgb(9fd49b)", + border_inactive = "rgb(8c9388)", + border_locked_active = "rgb(ffb4ab)", + border_locked_inactive = "rgb(8c9388)", + }, + groupbar = { + col = { + active = "rgb(9fd49b)", + inactive = "rgb(8c9388)", + locked_active = "rgb(ffb4ab)", + locked_inactive = "rgb(8c9388)", + }, + }, + }, +}) diff --git a/dot_config/hypr/dms/cursor.lua b/dot_config/hypr/dms/cursor.lua new file mode 100644 index 0000000..08a930b --- /dev/null +++ b/dot_config/hypr/dms/cursor.lua @@ -0,0 +1,6 @@ +-- Auto-generated by DMS — do not edit manually + +hl.env("HYPRCURSOR_THEME", "breeze_cursors") +hl.env("XCURSOR_THEME", "breeze_cursors") +hl.env("HYPRCURSOR_SIZE", "24") +hl.env("XCURSOR_SIZE", "24") diff --git a/dot_config/hypr/dms/layout.lua b/dot_config/hypr/dms/layout.lua new file mode 100644 index 0000000..a8c289d --- /dev/null +++ b/dot_config/hypr/dms/layout.lua @@ -0,0 +1,18 @@ +-- Auto-generated by DMS — do not edit manually + +hl.config({ + general = { + gaps_in = 4, + gaps_out = 4, + border_size = 1, + resize_on_border = false, + }, + decoration = { + rounding = 12, + }, +}) + +hl.layer_rule({ + match = { namespace = "^dms:bar$" }, + xray = true, +}) diff --git a/dot_config/hypr/dms/outputs.lua.tmpl b/dot_config/hypr/dms/outputs.lua.tmpl new file mode 100644 index 0000000..c6890b3 --- /dev/null +++ b/dot_config/hypr/dms/outputs.lua.tmpl @@ -0,0 +1,14 @@ +-- Auto-generated by DMS — do not edit manually +-- Templated by chezmoi: per-system monitor configuration. + +{{ if eq .system "desktop" }} +hl.monitor({ output = "", mode = "preferred", position = "0x0", scale = 1 }) +hl.monitor({ output = "HDMI-A-2", mode = "1920x1080@60.000", position = "6400x1080", scale = 1, vrr = 0 }) +hl.monitor({ output = "DP-2", mode = "3840x2160@120.000", position = "2560x0", scale = 1, vrr = 0 }) +hl.monitor({ output = "HDMI-A-1", mode = "2560x1440@119.998", position = "0x0", scale = 1, vrr = 0 }) +{{ else if eq .system "laptop" }} +hl.monitor({ output = "", mode = "preferred", position = "0x0", scale = 1 }) +hl.monitor({ output = "eDP-1", mode = "preferred", position = "0x0", scale = 1 }) +{{ else }} +-- server has no GUI; no monitors defined +{{ end }} \ No newline at end of file diff --git a/dot_config/hypr/dms/windowrules.lua b/dot_config/hypr/dms/windowrules.lua new file mode 100644 index 0000000..7627ea4 --- /dev/null +++ b/dot_config/hypr/dms/windowrules.lua @@ -0,0 +1,8 @@ +-- DMS Window Rules — managed by DankMaterialShell +-- Do not edit manually; changes may be overwritten + +-- DMS-RULE: id=wr_1785350111586245435, name=feishin +hl.window_rule({ match = { class = "^feishin$" }, workspace = "2" }) + +-- DMS-RULE: id=wr_1785350520619777540, name=vesktop +hl.window_rule({ match = { class = "^vesktop$" }, workspace = "6" }) diff --git a/dot_config/hypr/hyprland.lua.tmpl b/dot_config/hypr/hyprland.lua.tmpl new file mode 100644 index 0000000..3f2a47b --- /dev/null +++ b/dot_config/hypr/hyprland.lua.tmpl @@ -0,0 +1,112 @@ +-- Hyprland configuration (Lua) — https://wiki.hypr.land/Configuring/Start/ +-- Templated by chezmoi: per-system autostart, touchpad, and workspace rules. +hl.config({ autogenerated = false }) + +hl.on("hyprland.start", function() + -- DMS_STARTUP_BEGIN + hl.exec_cmd("dbus-update-activation-environment --systemd --all") + hl.exec_cmd("systemctl --user start hyprland-session.target") + -- DMS_STARTUP_END + + -- Auto Start Applications +{{ if eq .system "desktop" }} + hl.exec_cmd("kdeconnectd") + hl.exec_cmd("feishin") + hl.exec_cmd("vesktop") +{{ else if eq .system "laptop" }} + hl.exec_cmd("kdeconnectd") +{{ else }} + -- server has no GUI; nothing to autostart +{{ end }} +end) + +hl.config({ + input = { + kb_layout = "us", + numlock_by_default = true, + follow_mouse = 1, + repeat_delay = 300, + touchpad = { + tap_to_click = true, + natural_scroll = true, +{{ if eq .system "laptop" }} + disable_while_typing = true, +{{ end }} + }, + }, + general = { + gaps_in = 4, + gaps_out = 4, + border_size = 1, + layout = "dwindle", + }, + decoration = { + rounding = 12, + active_opacity = 1.0, + inactive_opacity = 0.97, + dim_inactive = true, + dim_strength = 0.1, + shadow = { + enabled = true, + range = 30, + render_power = 5, + offset = "0 5", + color = "rgba(00000070)", + }, + blur = { + enabled = true, + size = 8, + }, + }, + dwindle = { + preserve_split = true, + }, + master = { + mfact = 0.5, + }, +}) + +hl.animation({ leaf = "windowsIn", enabled = true, speed = 3, bezier = "default" }) +hl.animation({ leaf = "windowsOut", enabled = true, speed = 3, bezier = "default" }) +hl.animation({ leaf = "workspaces", enabled = true, speed = 5, bezier = "default" }) +hl.animation({ leaf = "windowsMove", enabled = true, speed = 4, bezier = "default" }) +hl.animation({ leaf = "fade", enabled = true, speed = 3, bezier = "default" }) +hl.animation({ leaf = "border", enabled = true, speed = 3, bezier = "default" }) +hl.layer_rule({ match = { namespace = "^(quickshell)$" }, no_anim = true }) +hl.layer_rule({ match = { namespace = "^dms:.*" }, no_anim = true }) + +-- Workspaces rules +{{ if eq .system "desktop" }} +hl.workspace_rule({ workspace = "1", monitor = "HDMI-A-1" }) +hl.workspace_rule({ workspace = "2", monitor = "HDMI-A-1" }) + +hl.workspace_rule({ workspace = "3", monitor = "DP-2" }) +hl.workspace_rule({ workspace = "4", monitor = "DP-2" }) +hl.workspace_rule({ workspace = "5", monitor = "DP-2" }) + +hl.workspace_rule({ workspace = "6", monitor = "HDMI-A-2" }) +hl.workspace_rule({ workspace = "7", monitor = "HDMI-A-2" }) +{{ else if eq .system "laptop" }} +hl.workspace_rule({ workspace = "1", monitor = "eDP-1" }) +hl.workspace_rule({ workspace = "2", monitor = "eDP-1" }) +hl.workspace_rule({ workspace = "3", monitor = "eDP-1" }) +hl.workspace_rule({ workspace = "4", monitor = "eDP-1" }) +hl.workspace_rule({ workspace = "5", monitor = "eDP-1" }) +{{ else }} +-- server has no GUI; no workspace rules +{{ end }} + +-- Env vars +hl.env("XDG_MENU_PREFIX", "plasma-") +hl.env("QT_QPA_PLATFORM", "wayland") +hl.env("QT_QPA_PLATFORMTHEME", "gtk3") +hl.env("ELECTRON_OZONE_PLATFORM_HINT", "auto") + +-- Dank Material Shell +require("dms.colors") +require("dms.outputs") +require("dms.layout") +require("dms.cursor") +require("dms.binds") +require("dms.binds-user") +require("dms.windowrules") \ No newline at end of file diff --git a/dot_config/hypr/hyprland/colors.conf b/dot_config/hypr/hyprland/colors.conf new file mode 100644 index 0000000..928bee2 --- /dev/null +++ b/dot_config/hypr/hyprland/colors.conf @@ -0,0 +1,32 @@ +general { + col.active_border = rgba(8c938877) + col.inactive_border = rgba(42494055) +} + +misc { + background_color = rgba(10140fFF) +} + +plugin { + hyprbars { + # Honestly idk if it works like css, but well, why not + bar_text_font = Google Sans Flex Medium, Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif + bar_height = 30 + bar_padding = 10 + bar_button_padding = 5 + bar_precedence_over_border = true + bar_part_of_window = true + + bar_color = rgba(10140fFF) + col.text = rgba(e0e4dbFF) + + + # example buttons (R -> L) + # hyprbars-button = color, size, on-click + hyprbars-button = rgb(e0e4db), 13, 󰖭, hyprctl dispatch killactive + hyprbars-button = rgb(e0e4db), 13, 󰖯, hyprctl dispatch fullscreen 1 + hyprbars-button = rgb(e0e4db), 13, 󰖰, hyprctl dispatch movetoworkspacesilent special + } +} + +windowrule = border_color rgba(9fd49bAA) rgba(9fd49b77), match:pin 1 diff --git a/dot_config/hypr/hyprlock/colors.conf b/dot_config/hypr/hyprlock/colors.conf new file mode 100644 index 0000000..8f99fb3 --- /dev/null +++ b/dot_config/hypr/hyprlock/colors.conf @@ -0,0 +1,12 @@ +# This configuration is generated by matugen +# Changing these variables with matugen still enabled will overwrite them. + +$text_color = rgba(bbf0b6FF) +$entry_background_color = rgba(00210511) +$entry_border_color = rgba(8c938855) +$entry_color = rgba(bbf0b6FF) +$font_family = Google Sans Flex Medium +$font_family_clock = Google Sans Flex Medium +$font_material_symbols = Material Symbols Rounded + +$background_image = /home/keule/Pictures/wallpapers/background.jpg \ No newline at end of file diff --git a/roles/nvim/files/README.md b/dot_config/nvim/README.md similarity index 100% rename from roles/nvim/files/README.md rename to dot_config/nvim/README.md diff --git a/roles/nvim/files/init.lua b/dot_config/nvim/init.lua similarity index 100% rename from roles/nvim/files/init.lua rename to dot_config/nvim/init.lua diff --git a/roles/nvim/files/lua/community.lua b/dot_config/nvim/lua/community.lua similarity index 100% rename from roles/nvim/files/lua/community.lua rename to dot_config/nvim/lua/community.lua diff --git a/roles/nvim/files/lua/lazy_setup.lua b/dot_config/nvim/lua/lazy_setup.lua similarity index 100% rename from roles/nvim/files/lua/lazy_setup.lua rename to dot_config/nvim/lua/lazy_setup.lua diff --git a/roles/nvim/files/lua/plugins/astrocore.lua b/dot_config/nvim/lua/plugins/astrocore.lua similarity index 100% rename from roles/nvim/files/lua/plugins/astrocore.lua rename to dot_config/nvim/lua/plugins/astrocore.lua diff --git a/roles/nvim/files/lua/plugins/astrolsp.lua b/dot_config/nvim/lua/plugins/astrolsp.lua similarity index 100% rename from roles/nvim/files/lua/plugins/astrolsp.lua rename to dot_config/nvim/lua/plugins/astrolsp.lua diff --git a/roles/nvim/files/lua/plugins/astroui.lua b/dot_config/nvim/lua/plugins/astroui.lua similarity index 100% rename from roles/nvim/files/lua/plugins/astroui.lua rename to dot_config/nvim/lua/plugins/astroui.lua diff --git a/roles/nvim/files/lua/plugins/mappings.lua b/dot_config/nvim/lua/plugins/mappings.lua similarity index 100% rename from roles/nvim/files/lua/plugins/mappings.lua rename to dot_config/nvim/lua/plugins/mappings.lua diff --git a/roles/nvim/files/lua/plugins/mason.lua b/dot_config/nvim/lua/plugins/mason.lua similarity index 100% rename from roles/nvim/files/lua/plugins/mason.lua rename to dot_config/nvim/lua/plugins/mason.lua diff --git a/roles/nvim/files/lua/plugins/neo-tree.lua b/dot_config/nvim/lua/plugins/neo-tree.lua similarity index 100% rename from roles/nvim/files/lua/plugins/neo-tree.lua rename to dot_config/nvim/lua/plugins/neo-tree.lua diff --git a/roles/nvim/files/lua/plugins/none-ls.lua b/dot_config/nvim/lua/plugins/none-ls.lua similarity index 100% rename from roles/nvim/files/lua/plugins/none-ls.lua rename to dot_config/nvim/lua/plugins/none-ls.lua diff --git a/roles/nvim/files/lua/plugins/treesitter.lua b/dot_config/nvim/lua/plugins/treesitter.lua similarity index 100% rename from roles/nvim/files/lua/plugins/treesitter.lua rename to dot_config/nvim/lua/plugins/treesitter.lua diff --git a/roles/nvim/files/lua/plugins/user.lua b/dot_config/nvim/lua/plugins/user.lua similarity index 100% rename from roles/nvim/files/lua/plugins/user.lua rename to dot_config/nvim/lua/plugins/user.lua diff --git a/roles/nvim/files/lua/polish.lua b/dot_config/nvim/lua/polish.lua similarity index 100% rename from roles/nvim/files/lua/polish.lua rename to dot_config/nvim/lua/polish.lua diff --git a/roles/nvim/files/neovim.yml b/dot_config/nvim/neovim.yml similarity index 100% rename from roles/nvim/files/neovim.yml rename to dot_config/nvim/neovim.yml diff --git a/roles/nvim/files/selene.toml b/dot_config/nvim/selene.toml similarity index 100% rename from roles/nvim/files/selene.toml rename to dot_config/nvim/selene.toml diff --git a/roles/starship/files/starship.toml b/dot_config/starship/starship.toml.tmpl similarity index 96% rename from roles/starship/files/starship.toml rename to dot_config/starship/starship.toml.tmpl index 25dabb5..10d815d 100644 --- a/roles/starship/files/starship.toml +++ b/dot_config/starship/starship.toml.tmpl @@ -44,7 +44,9 @@ min_time = 1 # Somethere at the beginning [battery] charging_symbol = "" -disabled = true +{{ if eq .system "laptop" }}disabled = false +{{ else }}disabled = true +{{ end }} discharging_symbol = "" full_symbol = "" diff --git a/roles/yazi/files/keymap.toml b/dot_config/yazi/keymap.toml similarity index 100% rename from roles/yazi/files/keymap.toml rename to dot_config/yazi/keymap.toml diff --git a/roles/yazi/files/package.toml b/dot_config/yazi/package.toml similarity index 100% rename from roles/yazi/files/package.toml rename to dot_config/yazi/package.toml diff --git a/roles/yazi/files/plugins/bookmarks.yazi/LICENSE b/dot_config/yazi/plugins/bookmarks.yazi/LICENSE similarity index 100% rename from roles/yazi/files/plugins/bookmarks.yazi/LICENSE rename to dot_config/yazi/plugins/bookmarks.yazi/LICENSE diff --git a/roles/yazi/files/plugins/bookmarks.yazi/README.md b/dot_config/yazi/plugins/bookmarks.yazi/README.md similarity index 100% rename from roles/yazi/files/plugins/bookmarks.yazi/README.md rename to dot_config/yazi/plugins/bookmarks.yazi/README.md diff --git a/roles/yazi/files/plugins/bookmarks.yazi/main.lua b/dot_config/yazi/plugins/bookmarks.yazi/main.lua similarity index 100% rename from roles/yazi/files/plugins/bookmarks.yazi/main.lua rename to dot_config/yazi/plugins/bookmarks.yazi/main.lua diff --git a/roles/yazi/files/yazi.toml b/dot_config/yazi/yazi.toml similarity index 100% rename from roles/yazi/files/yazi.toml rename to dot_config/yazi/yazi.toml diff --git a/dot_gitconfig.tmpl b/dot_gitconfig.tmpl new file mode 100644 index 0000000..b6517f7 --- /dev/null +++ b/dot_gitconfig.tmpl @@ -0,0 +1,10 @@ +[user] + email = {{ .email }} + name = {{ .name }} + signingkey = 3EBCBD305D1C69450CEBF4A8B57235A0D139F9FD +[init] + defaultBranch = main +[core] + autocrlf = input +[commit] + gpgsign = true diff --git a/encrypted_dot_wakatime.cfg.age b/encrypted_dot_wakatime.cfg.age new file mode 100644 index 0000000..863f166 --- /dev/null +++ b/encrypted_dot_wakatime.cfg.age @@ -0,0 +1,42 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IG1sa2VtNzY4eDI1NTE5IE9PTEZEc21o +Tm9QRWFCblZ0eURVZURmQTRLMU9jN1Iza29rV21SUndiS29CYmtlenlKV3pUMEpE +Y0hKU3phTjJnbjMzNnYzUkdYa3g3MitNSzB1ZVVSYkNOMzJTbVNUU3ZuRlAxRXNL +SzN3SmhIUGhxd1RXZHI0RmNqaUNmSTJpaVlpVFA4QmF2ZVFEWTJlK01UZFB3dDd0 +NXMxWXhtMmFrVURxUW52aWZhMUovc0tNUjZYWXFOMU1YVGllT1pxemtrUU9ldlZU +bHVOYlhVS2tYUm1kUElvd2hBK1RBNXZpWGwrR2R3R0hSNUVyc1RrQUR4MFZXRmgz +eStwZUxMSVFhV0t2UThtL09VR1FnL2NMa3c3a2o3OEtMTkVHblpyd2phajhSTkZC +N2NoUnZpZnpHRTdFTGtERGg5US9USWlDbnBRWTAyb2NzK0dZOGplWWxsWXhiVkoy +b0pmOW5mdHE2TnlhNEx2bUVoeVZqUTdKN3YzYTJQQ2Z5VzA1WGFxSjZhUWgwbndv +UUtBclJtOUdlWVQ1RW54cDJ6b1BWc3VhTnpRZEc0WXlMQmRUVjB0ZlYrTnVNV2Zu +ZGtTaitqRkdGVWorQTBNcnpReHY5bnBWeTAxRHI3YVg0WUdyVHd5NlBkNER6NzYz +c2RWTFB3cVBaUFpZMzUzU3NYRmZHV1gvMnZLUFd6WldLOWVyLytCWHhBOStDOFBm +Z05KUms0OVh0QzFlNEdqdEU3c3NZelNkMGxtdXhBeWd0L0Zha1JFNVhZc1pnbHNW +WDRNeTdRajFodEhFRmRmdlkxNEYyTzFpWmk1eWJQdnJIN1VseUtlTTFtRTJibGlj +QjRkdThpdDhZU1hJT2s5SUx4MGZGbVRYY3psdVgxSm9hbmV1aUpTQzdxbm9xYkVr +dkx4a2d5TStBcytVTjgydUlLU2hwcWJ6TFRlZjZIRVRaSWNObXFGU2NDMWxQMUFQ +akM4UkxhY3VUZUdHKzAyb0wzNTM1L2xIQmJpaUVLSFlNZWIvbE1HVnVnVElWRzlP +RnRRUzRKazJmamtlYXhDazd6ZG12dUZ2a3JQR0FUOERCUDN2TVUvN0pXNHNRRnBr +RWlIRDltenRtR3F1TkR0aXRERHVGeVZJTGF1b3pYbFpVREc1TUhDTlhCQjJlN3hl +MzBCZVRyM0kxRSt1MFU5TDA4ZTF1VUtCSEFZQkl5Zit2TnNCaUU0cUhFNlhFcG9W +TjR6eTZJbEJiS2gyVE1PWWUycDlYQ3dvZlFUc2plMDBMZXFqUkpUMFJpWGhnSWtj +N0JQSzBuM0pFY1B1bXEzclowbFFhaElXa1RPSFJ6ZHRtZHRDdXRFZStVcGw0dGpx +Q21wK0VBc0xpak9rMUNHMVBISFQ2bndqYnNSblUrVmM2bTVCZ3NIQU16RGkxOUJU +Mk9haE5RRTAxVGlOY3NCbFQ3V2xrc0YxeS83QVEyamJrN2crWnhNY2FEb3RMKy9P +Z1BoOWYwMlRLVWZqL2FxYkp5TE9seWFjMUVXcE12S1ZEZjA0bW5FUmh1N2FLY0Va +dnVJNHhNSlFONnk1L2xEcHFpWlRuMXJadHp6NFc3WjBqZTdGWWc5TjhPbmNFaDdZ +cGpjcHhqUXV2NTZ5Ny9seE5RMlZxb01TSG9KbVdheHNtQTRYWTNVak40VzZpY2ZU +OC8xekVwa0s4elBVUC9MMzBCSmRkckhjajc5SVM3VjhvZFFyRDRjRHRzcWZISWJB +blZnLzMwVW1aTjRBSVpDNERzR24rRDU1cCtzL3Uwb2RIUjRtUWZnZFJONGJha3or +aFhaME54dEwzMGJvQ0ZHbVhPZXdWUCtIN05UdmlwbkhjaFV3aCtGMnFHU2pTK21z +NTlPNEtwR0NRZmJWWStwWFJtY2N4djV5WmpnSmJtYkQvVXRKbWlZL0YrMnRKSzY1 +MlBXQ2dUMzluQ2ZNQ3dJSFFrYUxVS0FRY3BNK0dLck9QcG1EVVJLbVJYdnRZQQpE +OTluZjV2ZWN1RG9tSnpEQ1htVzZRMlFJcDJFSW9hc1BsVWoyaHc2ek1BCi0tLSAx +bVFZODh0eTRyemtKcEtabU5iOFltR1RPYndvV0h4ME5CZ0V6a0k2dkgwCjMcrv1i +X/Q7cSztMHyJ2h7X/Pua0a8+Uw21d8rJwvbiCTTIrje4HLT7+CtHl+wRand/yPpj +13od2ldCW020adzS8h2EL9erX0SCGtD6Kk4Au9rX9TKEEZCFkffimYgMnTt+MUAZ +HAY2QbGOQsqOynDdeWBTwemKQep8kSgLoGONKO7Tz2l2/MqUCS2W7YQRFb783i03 +kicX6irr+EaVq9BdX2KOO/c7K7DshJ6AXYMFhcGBY0wn5TnXoO/3ANBTg0zj7CgO +WU3oMKfc1tgHCzXfp5t8UdTnmiMxPussFxil/rVIiUmhtg6R/ADfaENALYreOxKT +Y6zMgQ== +-----END AGE ENCRYPTED FILE----- diff --git a/group_vars/all b/group_vars/all deleted file mode 100644 index 4644da2..0000000 --- a/group_vars/all +++ /dev/null @@ -1,29 +0,0 @@ -default_roles: - - bash - - btop - - fish - - nvim - - starship - - yazi - -desktop_roles: - - alacritty - - discord - - hypr - - kvantum - - minegrub - - nwg-look - - qt5ct - - sddm - - wakatime - -system: desktop - -wakapi_key: !vault | - $ANSIBLE_VAULT;1.1;AES256 - 39346164353734613634356635383464636463373437333463616530346162303666343962383364 - 3862316162646639353665336530613965663437316263310a646464663038346539393039666537 - 32636139616239643934353135656662376262356433616635343830646164363435353739343966 - 6233303036393538370a656564643033383334323631663631336137346161326464373364346230 - 64323564663534393766356166393363376237633565316363363138373033353030373139366365 - 6435323438633233363166626330633164346534363335666433 diff --git a/install.sh b/install.sh deleted file mode 100755 index 90b6017..0000000 --- a/install.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/bin/bash - -# Vars -DOTFILES_DIR="$HOME/.dotfiles" -CONFIG_DIR="$HOME/.config/dotfiles" -REPO="https://gitea.keuledrive.de/Keule2/Dotfiles.git" -DIST=$(source /etc/os-release && echo $ID) - -# Colors -COLOR_RESET='\033[0m' -RED='\033[0;31m' -LGREEN='\033[01;32m' - -# Helper Functions -print_header() { - echo -e "${LGREEN}$1${COLOR_RESET}" -} - -cmd() { - local DOTFILES_LOG="./error.log" - - if eval "$1" 1> /dev/null 2> $DOTFILES_LOG; then - rm "$DOTFILES_LOG" - return 0 - fi - - echo -e "${RED}" - cat $DOTFILES_LOG - echo -e "${COLOR_RESET}" - rm "$DOTFILES_LOG" - exit 1 -} - -paru_install() { - if [ -x "$(command -v paru)" ]; then - return - fi - - # Install Base-Devel - if [ -z "$(pacman -Q | grep base-devel)" ]; then - print_header "Installing base-devel" - cmd "sudo pacman -S base-devel --noconfirm" - fi - # Install RustUp - if ! [ -x "$(command -v rustup)" ]; then - print_header "Installing rustup" - cmd "sudo pacman -S rustup --noconfirm" - cmd "rustup default stable" - fi - # Instal Paru - FOLDER=$(mktemp -d) - print_header "Installing paru" - cmd "git clone https://aur.archlinux.org/paru.git $FOLDER" - cd $FOLDER - cmd "makepkg -si --noconfirm" -} - -arch_install() { - # Install Ansible - if ! [ -x "$(command -v ansible)" ]; then - print_header "Installing ansible" - cmd "sudo pacman -S ansible --noconfirm" - fi - # Install Git - if ! [ -x "$(command -v git)" ]; then - print_header "Installing git" - cmd "sudo pacman -S git --noconfirm" - fi - # Installl Paru - paru_install - # Install PIP - if ! [ -x "$(command -v pip)" ]; then - print_header "Installing pip" - cmd "sudo pacman -S python-pip --noconfirm" - fi - # Install Watchdog - if [ -z "$(pip list | grep watchdog)" ]; then - print_header "Installing watchdog" - cmd "pip install --break-system-packages watchdog" - fi -} - -ubuntu_install() { - # Install Ansible - if ! dpkg -s ansible >/dev/null 2>&1; then - print_header "Installing ansible" - cmd "sudo apt-get update" - cmd "sudo apt-get install -y software-properties-common" - cmd "sudo apt-add-repository -y ppa:ansible/ansible" - cmd "sudo apt-get update" - cmd "sudo apt-get install -y ansible" - cmd "sudo apt-get install python3-argcomplete" - cmd "sudo activate-global-python-argcomplete3" - fi - # Install Git - if ! dpkg -s git >/dev/null 2>&1; then - print_header "Installing git" - cmd "sudo apt-get install -y git" - fi - # TODO pip, watchdog -} - -update_galaxy() { - local OS=$1 - - print_header "Installing/Updating ansible-galaxy" - cmd "ansible-galaxy install -r $DOTFILES_DIR/requirements/default.yml" - if [ -f "$DOTFILES_DIR/requirements/$OS.yml" ]; then - cmd "ansible-galaxy install -r $DOTFILES_DIR/requirements/$OS.yml" - fi -} - -# Banner -cat << "EOF" -________ __ .___ __ .__ .__ -\______ \ _____/ |_ ______ | | ____ _______/ |______ | | | | ___________ - | | \ / _ \ __\/ ___/ | |/ \ / ___/\ __\__ \ | | | | _/ __ \_ __ \ - | ` ( <_> ) | \___ \ | | | \\___ \ | | / __ \| |_| |_\ ___/| | \/ -/_______ /\____/|__| /____ > |___|___| /____ > |__| (____ /____/____/\___ >__| - \/ \/ \/ \/ \/ \/ -EOF - -# Setup -case $DIST in - arch) - arch_install - ;; - ubuntu) - ubuntu_install - ;; - *) - echo "Unsupported OS" - exit 1 - ;; -esac - -# Clone repository -if ! [[ -d "$DOTFILES_DIR" ]]; then - print_header "Cloning repo" - cmd "git clone $REPO $DOTFILES_DIR" -else - print_header "Updating repo" - cmd "git -C $DOTFILES_DIR pull" -fi - -# Change Working Dir -cd "$DOTFILES_DIR" - -# Update Galaxy -update_galaxy $DIST - -# Run playbook -if [[ -f "$CONFIG_DIR/vault-password.txt" ]]; then - if [[ -f "$CONFIG_DIR/values.yml" ]]; then - ansible-playbook --diff -v --ask-become-pass --extra-vars "@$CONFIG_DIR/values.yml" --vault-password-file "$CONFIG_DIR/vault-password.txt" "$DOTFILES_DIR/main.yml" "$@" - else - ansible-playbook --diff -v --ask-become-pass --vault-password-file "$CONFIG_DIR/vault-password.txt" "$DOTFILES_DIR/main.yml" "$@" - fi -elif [[ -f "$CONFIG_DIR/values.yml" ]]; then - ansible-playbook --diff -v --ask-become-pass --extra-vars "@$CONFIG_DIR/values.yml" "$DOTFILES_DIR/main.yml" "$@" -else - ansible-playbook --diff -v --ask-become-pass "$DOTFILES_DIR/main.yml" "$@" -fi diff --git a/main.yml b/main.yml deleted file mode 100644 index 493f752..0000000 --- a/main.yml +++ /dev/null @@ -1,52 +0,0 @@ ---- -- name: Dotfiles - hosts: localhost - connection: local - tasks: - - name: Get username - command: whoami - register: whoami - tags: - - always - - - name: Set username - set_fact: - username: "{{ whoami.stdout }}" - tags: - - always - - - name: Set default roles - set_fact: - roles: "{{ ansible_run_tags != ['all'] and ansible_run_tags or default_roles | difference(ansible_skip_tags | default([])) }}" - tags: - - always - - - name: Set desktop roles - set_fact: - roles: "{{ (desktop_roles + roles) | difference(ansible_skip_tags | default([])) }}" - tags: - - always - when: system != 'server' and desktop_roles is defined and ansible_run_tags == ['all'] - - - name: Prepend system role - set_fact: - roles: "{{ ['system'] | difference(roles) + roles }}" - tags: - - always - - - name: Display roles - debug: "var=roles" - tags: - - always - - - name: Run roles - include_role: - apply: - tags: - - "{{ roles_item }}" - name: "{{ roles_item }}" - loop_control: - loop_var: roles_item - with_items: "{{ roles }}" - tags: - - always diff --git a/requirements/arch.yml b/requirements/arch.yml deleted file mode 100644 index 052506b..0000000 --- a/requirements/arch.yml +++ /dev/null @@ -1,2 +0,0 @@ -collections: - - name: kewlfft.aur diff --git a/requirements/default.yml b/requirements/default.yml deleted file mode 100644 index 72fe72d..0000000 --- a/requirements/default.yml +++ /dev/null @@ -1,2 +0,0 @@ -collections: - - name: community.general diff --git a/roles/alacritty/files/alacritty.toml b/roles/alacritty/files/alacritty.toml deleted file mode 100644 index 05542c8..0000000 --- a/roles/alacritty/files/alacritty.toml +++ /dev/null @@ -1,19 +0,0 @@ -import = [ - # Theme - "~/.config/alacritty/catppuccin-macchiato.toml" -] - -[env] -TERM = "xterm-256color" - -[window] -opacity = 0.7 -decorations = "None" -padding = { x = 0, y = 0 } - -[font] -normal = {family = "CaskaydiaCove Nerd Font", style = "Mono"} - -[cursor] -style = {shape = "Beam", blinking = "On"} -vi_mode_style = {shape = "Block", blinking = "On"} diff --git a/roles/alacritty/files/catppuccin-macchiato.toml b/roles/alacritty/files/catppuccin-macchiato.toml deleted file mode 100644 index f7e1658..0000000 --- a/roles/alacritty/files/catppuccin-macchiato.toml +++ /dev/null @@ -1,97 +0,0 @@ -# MIT License -# -# Copyright (c) 2021 Catppuccin -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -[colors.primary] -background = "#24273A" -foreground = "#CAD3F5" -dim_foreground = "#CAD3F5" -bright_foreground = "#CAD3F5" - -[colors.cursor] -text = "#24273A" -cursor = "#F4DBD6" - -[colors.vi_mode_cursor] -text = "#24273A" -cursor = "#B7BDF8" - -[colors.search.matches] -foreground = "#24273A" -background = "#A5ADCB" - -[colors.search.focused_match] -foreground = "#24273A" -background = "#A6DA95" - -[colors.footer_bar] -foreground = "#24273A" -background = "#A5ADCB" - -[colors.hints.start] -foreground = "#24273A" -background = "#EED49F" - -[colors.hints.end] -foreground = "#24273A" -background = "#A5ADCB" - -[colors.selection] -text = "#24273A" -background = "#F4DBD6" - -[colors.normal] -black = "#494D64" -red = "#ED8796" -green = "#A6DA95" -yellow = "#EED49F" -blue = "#8AADF4" -magenta = "#F5BDE6" -cyan = "#8BD5CA" -white = "#B8C0E0" - -[colors.bright] -black = "#5B6078" -red = "#ED8796" -green = "#A6DA95" -yellow = "#EED49F" -blue = "#8AADF4" -magenta = "#F5BDE6" -cyan = "#8BD5CA" -white = "#A5ADCB" - -[colors.dim] -black = "#494D64" -red = "#ED8796" -green = "#A6DA95" -yellow = "#EED49F" -blue = "#8AADF4" -magenta = "#F5BDE6" -cyan = "#8BD5CA" -white = "#B8C0E0" - -[[colors.indexed_colors]] -index = 16 -color = "#F5A97F" - -[[colors.indexed_colors]] -index = 17 -color = "#F4DBD6" diff --git a/roles/alacritty/tasks/main.yml b/roles/alacritty/tasks/main.yml deleted file mode 100644 index 5df6586..0000000 --- a/roles/alacritty/tasks/main.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -- name: "[Alacritty] Install" - kewlfft.aur.aur: - name: - - alacritty - - ueberzugpp - state: present - -- name: "[Alacritty] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/alacritty" - state: directory - -- name: "[Alacritty] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/alacritty" - -- name: "[Alacritty] Set default" - shell: gsettings set org.cinnamon.desktop.default-applications.terminal exec alacritty && gsettings set org.gnome.desktop.default-applications.terminal exec alacritty - ignore_errors: true diff --git a/roles/bash/tasks/main.yml b/roles/bash/tasks/main.yml deleted file mode 100644 index 98b810f..0000000 --- a/roles/bash/tasks/main.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -- name: "[Bash] Install" - ansible.builtin.package: - name: - - bash - state: latest - become: yes - -- name: "[Bash] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/" diff --git a/roles/btop/files/btop.conf b/roles/btop/files/btop.conf deleted file mode 100644 index 6125a66..0000000 --- a/roles/btop/files/btop.conf +++ /dev/null @@ -1,248 +0,0 @@ -#? Config file for btop v. 1.3.2 - -#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. -#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" -color_theme = "Default" - -#* If the theme set background should be shown, set to False if you want terminal background transparency. -theme_background = True - -#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. -truecolor = True - -#* Set to true to force tty mode regardless if a real tty has been detected or not. -#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. -force_tty = False - -#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. -#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. -#* Use whitespace " " as separator between different presets. -#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" -presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" - -#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. -#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. -vim_keys = True - -#* Rounded corners on boxes, is ignored if TTY mode is ON. -rounded_corners = True - -#* Default symbols to use for graph creation, "braille", "block" or "tty". -#* "braille" offers the highest resolution but might not be included in all fonts. -#* "block" has half the resolution of braille but uses more common characters. -#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. -#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. -graph_symbol = "braille" - -# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". -graph_symbol_cpu = "default" - -# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". -graph_symbol_gpu = "default" - -# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". -graph_symbol_mem = "default" - -# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". -graph_symbol_net = "default" - -# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". -graph_symbol_proc = "default" - -#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. -shown_boxes = "cpu mem net proc" - -#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. -update_ms = 2000 - -#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", -#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. -proc_sorting = "memory" - -#* Reverse sorting order, True or False. -proc_reversed = False - -#* Show processes as a tree. -proc_tree = False - -#* Use the cpu graph colors in the process list. -proc_colors = True - -#* Use a darkening gradient in the process list. -proc_gradient = True - -#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. -proc_per_core = True - -#* Show process memory as bytes instead of percent. -proc_mem_bytes = True - -#* Show cpu graph for each process. -proc_cpu_graphs = True - -#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) -proc_info_smaps = False - -#* Show proc box on left side of screen instead of right. -proc_left = False - -#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). -proc_filter_kernel = False - -#* In tree-view, always accumulate child process resources in the parent process. -proc_aggregate = False - -#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. -#* Select from a list of detected attributes from the options menu. -cpu_graph_upper = "total" - -#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. -#* Select from a list of detected attributes from the options menu. -cpu_graph_lower = "total" - -#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". -show_gpu_info = "Auto" - -#* Toggles if the lower CPU graph should be inverted. -cpu_invert_lower = True - -#* Set to True to completely disable the lower CPU graph. -cpu_single_graph = False - -#* Show cpu box at bottom of screen instead of top. -cpu_bottom = False - -#* Shows the system uptime in the CPU box. -show_uptime = True - -#* Show cpu temperature. -check_temp = True - -#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. -cpu_sensor = "Auto" - -#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. -show_coretemp = True - -#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. -#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. -#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. -#* Example: "4:0 5:1 6:3" -cpu_core_map = "" - -#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". -temp_scale = "celsius" - -#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. -base_10_sizes = False - -#* Show CPU frequency. -show_cpu_freq = True - -#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. -#* Special formatting: /host = hostname | /user = username | /uptime = system uptime -clock_format = "%X" - -#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. -background_update = True - -#* Custom cpu model name, empty string to disable. -custom_cpu_name = "" - -#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". -#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". -disks_filter = "" - -#* Show graphs instead of meters for memory values. -mem_graphs = True - -#* Show mem box below net box instead of above. -mem_below_net = False - -#* Count ZFS ARC in cached and available memory. -zfs_arc_cached = True - -#* If swap memory should be shown in memory box. -show_swap = True - -#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. -swap_disk = True - -#* If mem box should be split to also show disks info. -show_disks = True - -#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. -only_physical = True - -#* Read disks list from /etc/fstab. This also disables only_physical. -use_fstab = True - -#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) -zfs_hide_datasets = False - -#* Set to true to show available disk space for privileged users. -disk_free_priv = False - -#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. -show_io_stat = True - -#* Toggles io mode for disks, showing big graphs for disk read/write speeds. -io_mode = False - -#* Set to True to show combined read/write io graphs in io mode. -io_graph_combined = False - -#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". -#* Example: "/mnt/media:100 /:20 /boot:1". -io_graph_speeds = "" - -#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. -net_download = 100 - -net_upload = 100 - -#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. -net_auto = True - -#* Sync the auto scaling for download and upload to whichever currently has the highest scale. -net_sync = True - -#* Starts with the Network Interface specified here. -net_iface = "" - -#* Show battery stats in top right if battery is present. -show_battery = True - -#* Which battery to use if multiple are present. "Auto" for auto detection. -selected_battery = "Auto" - -#* Show power stats of battery next to charge indicator. -show_battery_watts = True - -#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". -#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. -log_level = "WARNING" - -#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. -nvml_measure_pcie_speeds = True - -#* Horizontally mirror the GPU graph. -gpu_mirror_graph = True - -#* Custom gpu0 model name, empty string to disable. -custom_gpu_name0 = "" - -#* Custom gpu1 model name, empty string to disable. -custom_gpu_name1 = "" - -#* Custom gpu2 model name, empty string to disable. -custom_gpu_name2 = "" - -#* Custom gpu3 model name, empty string to disable. -custom_gpu_name3 = "" - -#* Custom gpu4 model name, empty string to disable. -custom_gpu_name4 = "" - -#* Custom gpu5 model name, empty string to disable. -custom_gpu_name5 = "" diff --git a/roles/btop/tasks/main.yml b/roles/btop/tasks/main.yml deleted file mode 100644 index 7b20963..0000000 --- a/roles/btop/tasks/main.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: "[Btop] Install" - ansible.builtin.package: - name: - - btop - state: latest - become: true - -- name: "[Btop] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/btop" - state: directory - -- name: "[Btop] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/btop" diff --git a/roles/discord/files/Preferences b/roles/discord/files/Preferences deleted file mode 100644 index 364bb10..0000000 --- a/roles/discord/files/Preferences +++ /dev/null @@ -1 +0,0 @@ -{"spellcheck":{"dictionaries":["en-GB", "de-DE"],"dictionary":""}} diff --git a/roles/discord/files/storage/lang.json b/roles/discord/files/storage/lang.json deleted file mode 100644 index 8b4cb6e..0000000 --- a/roles/discord/files/storage/lang.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lang": "en-US" -} diff --git a/roles/discord/files/storage/settings.json b/roles/discord/files/storage/settings.json deleted file mode 100644 index 573b6c7..0000000 --- a/roles/discord/files/storage/settings.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "windowStyle": "native", - "channel": "stable", - "armcordCSP": true, - "minimizeToTray": false, - "keybinds": [], - "alternativePaste": false, - "multiInstance": false, - "mods": [ - "none" - ], - "spellcheck": true, - "performanceMode": "none", - "skipSplash": false, - "inviteWebsocket": true, - "startMinimized": false, - "dynamicIcon": false, - "tray": "dynamic", - "customJsBundle": "https://armcord.app/placeholder.js", - "customCssBundle": "https://armcord.app/placeholder.css", - "disableAutogain": false, - "useLegacyCapturer": false, - "mobileMode": false, - "trayIcon": "dynamic", - "doneSetup": true, - "clientName": "ArmCord", - "customIcon": "/usr/lib/armcord/app.asar/assets/desktop.png", - "modCache": { - "shelter": "1b35b8802a85809742af99f454bb941f56f759a3" - }, - "hardwareAcceleration": true, - "audio": { - "workaround": false, - "deviceSelect": true, - "granularSelect": true, - "ignoreVirtual": false, - "ignoreDevices": false, - "ignoreInputMedia": false, - "onlySpeakers": false, - "onlyDefaultSpeakers": true, - "loopbackType": "loopback" - }, - "transparency": "none", - "legcordCSP": true, - "bounceOnPing": false, - "disableHttpCache": false, - "autoHideMenuBar": true, - "blockPowerSavingInVoiceChat": false, - "useMacSystemPicker": true, - "popoutPiP": false, - "spellcheckLanguage": [ - "en-US", - "de-DE" - ], - "sleepInBackground": false, - "noBundleUpdates": false, - "additionalArguments": "", - "smoothScroll": true, - "autoScroll": false, - "useSystemCssEditor": false, - "overlayButtonColor": "#121214" -} diff --git a/roles/discord/files/themes/Catppuccin-Macchiato-BD/LICENSE b/roles/discord/files/themes/Catppuccin-Macchiato-BD/LICENSE deleted file mode 100644 index 5602ca7..0000000 --- a/roles/discord/files/themes/Catppuccin-Macchiato-BD/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Catppuccin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/roles/discord/files/themes/Catppuccin-Macchiato-BD/manifest.json b/roles/discord/files/themes/Catppuccin-Macchiato-BD/manifest.json deleted file mode 100644 index 761e9a1..0000000 --- a/roles/discord/files/themes/Catppuccin-Macchiato-BD/manifest.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "theme": "src.css", - "name": "Catppuccin Macchiato", - "author": "winston#0001", - "authorId": "505490445468696576", - "version": "0.2.0", - "description": "🎮 Soothing pastel theme for Discord", - "website": "https://github.com/catppuccin/discord", - "invite": "r6Mdz5dpFc", - "updateSrc": "https://raw.githubusercontent.com/catppuccin/discord/main/themes/macchiato.theme.css", - "supportsArmCordTitlebar": false, - "enabled": true -} diff --git a/roles/discord/files/themes/Catppuccin-Macchiato-BD/src.css b/roles/discord/files/themes/Catppuccin-Macchiato-BD/src.css deleted file mode 100644 index 3127eba..0000000 --- a/roles/discord/files/themes/Catppuccin-Macchiato-BD/src.css +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @name Catppuccin Macchiato - * @author winston#0001 - * @authorId 505490445468696576 - * @version 0.2.0 - * @description 🎮 Soothing pastel theme for Discord - * @website https://github.com/catppuccin/discord - * @invite r6Mdz5dpFc - * **/ - -@import url("https://catppuccin.github.io/discord/dist/catppuccin-macchiato.theme.css"); diff --git a/roles/discord/tasks/main.yml b/roles/discord/tasks/main.yml deleted file mode 100644 index 1d26ca4..0000000 --- a/roles/discord/tasks/main.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: "[Discord] Install" - kewlfft.aur.aur: - name: - - legcord - state: present - -- name: "[Discord] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/legcord" - state: directory - force: false - -- name: "[Discord] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/legcord" diff --git a/roles/fish/tasks/main.yml b/roles/fish/tasks/main.yml deleted file mode 100644 index 42241f7..0000000 --- a/roles/fish/tasks/main.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -- name: "[Fish] Install" - kewlfft.aur.aur: - name: - - fish - - fish-done - - fastfetch - - zoxide - state: present - -- name: "[Fish] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/fish" - state: directory - -- name: "[Fish] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/fish" - -- name: "[Fish] Set shell" - ansible.builtin.shell: - cmd: "sudo usermod -s $(which fish) {{ username }}" - become: true - ignore_errors: true diff --git a/roles/hypr/files/devices.conf b/roles/hypr/files/devices.conf deleted file mode 100755 index 1ca5cd4..0000000 --- a/roles/hypr/files/devices.conf +++ /dev/null @@ -1,5 +0,0 @@ -# Devices -device { - name = roccat-roccat-kone-emp-mouse - sensitivity = -0.5 -} diff --git a/roles/hypr/files/env.conf b/roles/hypr/files/env.conf deleted file mode 100755 index 437d06e..0000000 --- a/roles/hypr/files/env.conf +++ /dev/null @@ -1,9 +0,0 @@ -# Environment -env = XCURSOR_SIZE,24 -env = XCURSOR_THEME,Breeze -env = HYPRCURSOR_SIZE,24 -env = HYPRCURSOR_THEME,rose-pine-hyprcursor -env = XDG_SESSION_TYPE,wayland -env = WLR_NO_HARDWARE_CURSORS,1 -env = QT_QPA_PLATFORMTHEME,gtk3 -env = QT_STYLE_OVERRIDE,qt5ct diff --git a/roles/hypr/files/hyprland.conf b/roles/hypr/files/hyprland.conf deleted file mode 100755 index 82f3e95..0000000 --- a/roles/hypr/files/hyprland.conf +++ /dev/null @@ -1,83 +0,0 @@ -# Env -source = ~/.config/hypr/env.conf - -# Nvidia -# source = ~/.config/hypr/nvidia.conf - -# Keybinds -source = ~/.config/hypr/keybinds.conf - -# Monitors/Workspaces -source = ~/.config/hypr/windowrule.conf - -# Startup -source = ~/.config/hypr/startup.conf - -# Devices -source = ~/.config/hypr/devices.conf - -# Input -input { - kb_layout = us - numlock_by_default = 1 - - follow_mouse = 1 - - touchpad { - natural_scroll = yes - } -} - -# General -general { - gaps_in = 2 - gaps_out = 2 - border_size = 2 - col.active_border = rgba(7dc4e4ee) rgba(7dc4e4ee) 45deg - col.inactive_border = rgba(595959aa) - - layout = dwindle -} - -# Decoration -decoration { - rounding = 0 - - blur { - enabled = true - size = 2 - passes = 3 - #noise = 0 - new_optimizations = on - special = false - - blurls = rofi - blurls = gtk-layer-shell - } -} - -# Animations -animations { - enabled = yes - - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default -} - -# Dwindle -dwindle { - pseudotile = yes - preserve_split = yes -} - -# Misc -misc { - #mouse_move_enables_dpms = true - key_press_enables_dpms = true -} diff --git a/roles/hypr/files/keybinds.conf b/roles/hypr/files/keybinds.conf deleted file mode 100755 index 967375f..0000000 --- a/roles/hypr/files/keybinds.conf +++ /dev/null @@ -1,102 +0,0 @@ -# Keybindings -$mainMod = SUPER - -# General -bind = $mainMod, P, pseudo, -bind = $mainMod, DELETE, exit, -bind = $mainMod, C, killactive, -bind = $mainMod, M, fullscreen, -bind = $mainMod, S, togglesplit, -bind = $mainMod, F, togglefloating, -bind = $mainMod, O, global, caelestia:lock -bind = $mainMod, G, global, caelestia:dashboard -bind = $mainMod, F4, exec, ags -t powermenu -bind = $mainMod, SPACE, global, caelestia:launcher -bind = $mainMod, TAB, exec, ags -t overview -bind = $mainMod, V, exec, caelestia clipboard -bind = $mainMod, COMMA, exec, caelestia emoji -p -bind = $mainMod SHIFT, S, exec, grimblast --freeze copy area -bind = $mainMod CTRL, S, exec, grimblast --freeze copysave area ~/Pictures/Screenshots/"$(date --rfc-3339=seconds)".png - -# Media keys -bind = , XF86AudioNext, exec, playerctl next -bind = , XF86AudioPrev, exec, playerctl previous -bind = , XF86AudioPlay, exec, playerctl play -bind = , XF86AudioPause, exec, playerctl pause -bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle -bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle -binde = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_SINK@ 5%+ -binde = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_SINK@ 5%- -binde = , XF86MonBrightnessDown, exec, brightnessctl set 5%- -binde = , XF86MonBrightnessUp, exec, brightnessctl set 5%+ -#bind = , XF86PowerOff, exec, systemctl shutdown - -# Applications -bind = $mainMod, T, exec, alacritty -bind = $mainMod, E, exec, nemo -bind = $mainMod, G, exec, ags -t calc -bind = CTRL SHIFT, ESCAPE, exec, alacritty -e btop - -# Move focus -bind = $mainMod, left, movefocus, l -bind = $mainMod, H, movefocus, l -bind = $mainMod, right, movefocus, r -bind = $mainMod, L, movefocus, r -bind = $mainMod, up, movefocus, u -bind = $mainMod, K, movefocus, u -bind = $mainMod, down, movefocus, d -bind = $mainMod, J, movefocus, d - -# Scrachtpad -bind = $mainMod CTRL, 2, togglespecialworkspace, -bind = $mainMod CTRL, 1, movetoworkspace, special - -# Move window -bind = $mainMod SHIFT, left, movewindow, l -bind = $mainMod SHIFT, H, movewindow, l -bind = $mainMod SHIFT, right, movewindow, r -bind = $mainMod SHIFT, L, movewindow, r -bind = $mainMod SHIFT, up, movewindow, u -bind = $mainMod SHIFT, K, movewindow, u -bind = $mainMod SHIFT, down, movewindow, d -bind = $mainMod SHIFT, J, movewindow, d -bindm = $mainMod, mouse:272, movewindow - -# Resize windows -binde = $mainMod CTRL, left, resizeactive, -20 0 -binde = $mainMod CTRL, h, resizeactive, -20 0 -binde = $mainMod CTRL, right, resizeactive, 20 0 -binde = $mainMod CTRL, l, resizeactive, 20 0 -binde = $mainMod CTRL, up, resizeactive, 0 -20 -binde = $mainMod CTRL, k, resizeactive, 0 -20 -binde = $mainMod CTRL, down, resizeactive, 0 20 -binde = $mainMod CTRL, j, resizeactive, 0 20 -bindm = $mainMod, mouse:273, resizewindow - -# Move active window to a workspace -bind = $mainMod SHIFT, 1, movetoworkspace, 1 -bind = $mainMod SHIFT, 2, movetoworkspace, 2 -bind = $mainMod SHIFT, 3, movetoworkspace, 3 -bind = $mainMod SHIFT, 4, movetoworkspace, 4 -bind = $mainMod SHIFT, 5, movetoworkspace, 5 -bind = $mainMod SHIFT, 6, movetoworkspace, 6 -bind = $mainMod SHIFT, 7, movetoworkspace, 7 -bind = $mainMod SHIFT, 8, movetoworkspace, 8 -bind = $mainMod SHIFT, 9, movetoworkspace, 9 -bind = $mainMod SHIFT, 0, movetoworkspace, 10 - -# Switch workspaces -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 - -# Scroll through existing workspaces -bind = $mainMod, mouse_down, workspace, e+1 -bind = $mainMod, mouse_up, workspace, e-1 diff --git a/roles/hypr/files/nvidia.conf b/roles/hypr/files/nvidia.conf deleted file mode 100755 index b431303..0000000 --- a/roles/hypr/files/nvidia.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Nvidia env -env = GBM_BACKEND,nvidia-drm -env = LIBVA_DRIVER_NAME,nvidia -env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = __GL_VRR_ALLOWED,1 -env = WLR_NO_HARDWARE_CURSORS,1 -env = WLR_DRM_NO_ATOMIC,1 diff --git a/roles/hypr/tasks/main.yml b/roles/hypr/tasks/main.yml deleted file mode 100644 index 2a4ccaf..0000000 --- a/roles/hypr/tasks/main.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -- name: "[Hyprland] Install" - kewlfft.aur.aur: - name: - - hyprland - state: present - -- name: "[Hyprland] Create config folder" - ansible.builtin.file: - mode: 0755 - path: "{{ ansible_user_dir }}/.config/hypr" - state: directory - -- name: "[Hyprland] Create screenshot folder" - ansible.builtin.file: - mode: 0755 - path: "{{ ansible_user_dir }}/Pictures/Screenshots" - state: directory - -- name: "[Hyprland] Configure" - ansible.builtin.copy: - mode: 0755 - src: "./" - dest: "{{ ansible_user_dir }}/.config/hypr" - -- name: "[Hyprland] Configure startup" - ansible.builtin.template: - src: startup.conf - dest: "{{ ansible_user_dir }}/.config/hypr" - -- name: "[Hyprland] Configure windowrules" - ansible.builtin.template: - src: windowrule.conf - dest: "{{ ansible_user_dir }}/.config/hypr" diff --git a/roles/hypr/templates/startup.conf b/roles/hypr/templates/startup.conf deleted file mode 100755 index 5606e64..0000000 --- a/roles/hypr/templates/startup.conf +++ /dev/null @@ -1,19 +0,0 @@ -# Shell -exec-once = caelestia shell -d - -# Programms -{% if system == "desktop_full" %} -exec-once = legcord -exec-once = feishin -exec-once = nextcloud -{% endif %} -exec-once = nm-applet -exec-once = blueman-applet -exec-once = playerctld daemon - -# Clipboard -exec-once = wl-paste --type text --watch cliphist store #Stores only text data -exec-once = wl-paste --type image --watch cliphist store #Stores only image data - -# Misc -exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP diff --git a/roles/hypr/templates/windowrule.conf b/roles/hypr/templates/windowrule.conf deleted file mode 100755 index bd5d497..0000000 --- a/roles/hypr/templates/windowrule.conf +++ /dev/null @@ -1,33 +0,0 @@ -# Monitors -{% if system == "desktop_full" %} -$monitorOne = HDMI-A-1 -$monitorTwo = DP-2 -$monitorThree = HDMI-A-2 - -monitor = $monitorOne,1920x1080@144.001007,0x0,1 -monitor = $monitorTwo,2560x1440@143.912003,1920x0,1 -monitor = $monitorThree,1920x1080@60.000000,4480x0,1 -{% endif %} -monitor = ,preferred,auto,1 - - -# Window Rules - (hyprctl -j clients | grep class) -windowrule = workspace 2, class:feishin -windowrule = workspace 5, class:discord -windowrule = workspace 5, class:legcord - -# windowrule = float,class:lutris -# windowrule = size 965 545, class:lutris -# windowrule = float,title:^.*culator.*$ - -# Workspace -{% if system == "desktop_full" %} -workspace = 1, monitor:$monitorOne, default:true -workspace = 2, monitor:$monitorOne - -workspace = 3, monitor:$monitorTwo, default:true -workspace = 4, monitor:$monitorTwo - -workspace = 5, monitor:$monitorThree, default:true -workspace = 6, monitor:$monitorThree -{% endif %} diff --git a/roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.kvconfig b/roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.kvconfig deleted file mode 100644 index 91ab873..0000000 --- a/roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.kvconfig +++ /dev/null @@ -1,464 +0,0 @@ -[%General] -author=elkrien based on Arc Dark style -comment=Catppuccin-Frappe-Rosewater -spread_menuitems=true -left_tabs=true -mirror_doc_tabs=true -scroll_width=8 -attach_active_tab=true -composite=true -menu_shadow_depth=7 -tooltip_shadow_depth=0 -splitter_width=7 -check_size=16 -slider_width=4 -slider_handle_width=18 -slider_handle_length=18 -textless_progressbar=false -menubar_mouse_tracking=true -slim_toolbars=false -toolbutton_style=1 -x11drag=menubar_and_primary_toolbar -double_click=false -translucent_windows=false -blurring=false -popup_blurring=true -opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,qmplay2 -group_toolbar_buttons=false -vertical_spin_indicators=false -fill_rubberband=false -spread_progressbar=true -merge_menubar_with_toolbar=true -small_icon_size=16 -large_icon_size=32 -button_icon_size=16 -scroll_arrows=false -iconless_pushbutton=true -toolbar_icon_size=16 -combo_as_lineedit=true -button_contents_shift=false -groupbox_top_label=true -inline_spin_indicators=true -joined_inactive_tabs=false -layout_spacing=2 -submenu_overlap=0 -tooltip_delay=-1 -animate_states=false -transient_scrollbar=true -alt_mnemonic=true -combo_menu=true -layout_margin=4 -no_window_pattern=false -respect_DE=true -scroll_min_extent=36 -scrollable_menu=false -scrollbar_in_view=false -spin_button_width=16 -submenu_delay=250 -tree_branch_line=true -progressbar_thickness=8 -click_behavior=0 -contrast=1.00 -dialog_button_layout=0 -drag_from_buttons=false -hide_combo_checkboxes=false -intensity=1.00 -no_inactiveness=false -reduce_menu_opacity=0 -reduce_window_opacity=10 -saturation=1.00 -shadowless_popup=false -transient_groove=false - -[GeneralColors] -window.color=#303446 -base.color=#292C3C -alt.base.color=#292C3C -button.color=#414559 -light.color=#51576D -mid.light.color=#51576D -dark.color=#292C3C -mid.color=#292C3C -highlight.color=#F2D5CF -inactive.highlight.color=#F2D5CF -text.color=#C6D0F5 -window.text.color=#C6D0F5 -button.text.color=#C6D0F5 -disabled.text.color=#626880 -tooltip.text.color=#C6D0F5 -highlight.text.color=#292C3C -link.color=#F2D5CF -link.visited.color=#8CAAEE - -[ItemView] -inherits=PanelButtonCommand -frame.element=itemview -interior.element=itemview -frame=true -interior=true -text.iconspacing=3 -text.toggle.color=#292C3C - -[RadioButton] -inherits=PanelButtonCommand -frame=false -interior.element=radio - -[CheckBox] -inherits=PanelButtonCommand -frame=false -interior.element=checkbox - -[TreeExpander] -indicator.element=tree -indicator.size=8 - -[ToolTip] -frame.top=4 -frame.right=4 -frame.bottom=4 -frame.left=4 -frame=true - -[PanelButtonCommand] -inherits=PanelButtonCommand -interior.element=button -frame.element=button -text.normal.color=#C6D0F5 -text.focus.color=#C6D0F5 -text.press.color=#292C3C -text.toggle.color=#292C3C - -[PanelButtonTool] -inherits=PanelButtonCommand - -[DockTitle] -inherits=PanelButtonCommand -interior=false -frame=false -text.margin.top=5 -text.margin.bottom=5 -text.margin.left=5 -text.margin.right=5 -indicator.size=0 - -[Dock] -interior.element=toolbar -frame.element=toolbar -frame=true -interior=true - -[GroupBox] -inherits=PanelButtonCommand -interior.element=tabframe -interior=true -frame=false - -[Focus] -inherits=PanelButtonCommand -frame=true -frame.element=focus -frame.top=1 -frame.bottom=1 -frame.left=1 -frame.right=1 -frame.patternsize=20 - -[GenericFrame] -inherits=PanelButtonCommand -frame.element=common -frame.top=1 -frame.bottom=1 -frame.left=1 -frame.right=1 - -[Slider] -inherits=PanelButtonCommand -interior=true -frame.element=slider -interior.element=slider -frame.top=3 -frame.bottom=3 -frame.left=3 -frame.right=3 -focusFrame=true - -[SliderCursor] -inherits=PanelButtonCommand -interior=true -interior.element=slidercursor -frame=false - -[LineEdit] -inherits=PanelButtonCommand -frame.element=lineedit -interior.element=lineedit - -[IndicatorSpinBox] -inherits=LineEdit -frame.element=lineedit -interior.element=lineedit -frame.top=0 -frame.bottom=2 -frame.left=2 -frame.right=2 -indicator.size=8 - -[DropDownButton] -inherits=PanelButtonCommand -frame.top=2 -frame.bottom=2 -frame.left=0 -frame.right=1 -indicator.size=8 - -[ToolboxTab] -inherits=PanelButtonCommand -frame.element=tabframe -frame.top=1 -frame.bottom=1 -frame.left=1 -frame.right=1 - -[Tab] -inherits=PanelButtonCommand -interior.element=tab -frame.element=tab -frame.top=2 -frame.bottom=3 -frame.left=3 -frame.right=3 -indicator.size=10 -text.normal.color=#626880 -text.focus.color=#C6D0F5 -text.press.color=#C6D0F5 -text.toggle.color=#C6D0F5 -focusFrame=true - -[TabBarFrame] -inherits=GenericFrame -frame=true -frame.element=tabBarFrame -interior=false -frame.top=4 -frame.bottom=4 -frame.left=4 -frame.right=4 - -[TabFrame] -inherits=PanelButtonCommand -frame.element=tabframe -interior.element=tabframe - -[Dialog] -inherits=TabBarFrame -frame.element=tabframe -interior=false -frame=false -frame.top=1 -frame.bottom=1 -frame.left=1 -frame.right=1 - -[HeaderSection] -inherits=PanelButtonCommand -interior.element=header -frame.element=header -frame.top=0 -frame.bottom=1 -frame.left=1 -frame.right=1 -frame.expansion=0 -text.normal.color=#C6D0F5 -text.focus.color=#F2D5CF -text.press.color=#C6D0F5 -text.toggle.color=#C6D0F5 -indicator.element=harrow - -[SizeGrip] -inherits=PanelButtonCommand -frame=false -interior=false -indicator.element=resize-grip -indicator.size=0 - -[Toolbar] -inherits=PanelButtonCommand -interior.element=menubar -frame.element=menubar -frame=true -frame.bottom=4 -frame.left=4 -frame.right=4 -text.normal.color=#C6D0F5 -text.focus.color=#C6D0F5 -text.press.color=#F2D5CF -text.toggle.color=#F2D5CF -text.bold=false - -[MenuBar] -inherits=PanelButtonCommand -frame.element=menubar -interior.element=menubar -frame.bottom=0 -text.normal.color=#C6D0F5 -frame.expansion=0 -text.bold=false - -[ToolbarButton] -frame.element=tbutton -interior.element=tbutton -indicator.element=arrow -text.normal.color=#C6D0F5 -text.focus.color=#C6D0F5 -text.press.color=#292C3C -text.toggle.color=#292C3C -text.bold=false - -[Scrollbar] -inherits=PanelButtonCommand -indicator.size=0 -interior=false -frame=false - -[ScrollbarGroove] -inherits=PanelButtonCommand -interior=false -frame=false - -[ScrollbarSlider] -inherits=PanelButtonCommand -interior=false -frame.element=scrollbarslider -frame.top=4 -frame.bottom=4 -frame.left=4 -frame.right=4 - -[ProgressbarContents] -inherits=PanelButtonCommand -frame=true -frame.element=progress-pattern -interior.element=progress-pattern -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 - -[Progressbar] -inherits=PanelButtonCommand -frame.element=progress -interior.element=progress -frame.top=2 -frame.bottom=2 -frame.left=2 -frame.right=2 -text.margin=0 -text.normal.color=#C6D0F5 -text.focus.color=#C6D0F5 -text.press.color=#292C3C -text.toggle.color=#292C3C -text.bold=false -frame.expansion=18 - -[RadioButton] -inherits=PanelButtonCommand - -[Menu] -frame.element=menu -interior.element=menu -inherits=PanelButtonCommand -text.press.color=#292C3C -text.toggle.color=#292C3C -text.bold=false -frame.top=3 -frame.bottom=3 -frame.left=3 -frame.right=3 - -[MenuItem] -inherits=PanelButtonCommand -interior.element=menuitem -indicator.size=8 -text.focus.color=#C6D0F5 -text.press.color=#C6D0F5 - -[MenuBarItem] -inherits=PanelButtonCommand -interior.element=menubaritem -frame=false -text.margin.top=3 -text.margin.bottom=3 -text.margin.left=5 -text.margin.right=5 - -[StatusBar] -inherits=Toolbar -frame.element=toolbar -font.bold=true -text.normal.color=#C6D0F5 -frame=true -frame.top=0 -frame.bottom=0 - -[TitleBar] -inherits=PanelButtonCommand -frame=false -interior=false -text.margin.top=2 -text.margin.bottom=2 -text.margin.left=3 -text.margin.right=3 - -[ComboBox] -inherits=PanelButtonCommand -indicator.size=8 -frame.top=3 -frame.bottom=3 -frame.left=3 -frame.right=3 -text.margin.top=1 -text.margin.bottom=1 -text.margin.left=3 -text.margin.right=3 -text.toggle.color=#C6D0F5 - -[ToolboxTab] -inherits=PanelButtonCommand -text.normal.color=#C6D0F5 -text.press.color=#C6D0F5 -text.focus.color=#C6D0F5 - -[Hacks] -transparent_dolphin_view=false -blur_konsole=true -transparent_ktitle_label=true -transparent_menutitle=true -respect_darkness=true -kcapacitybar_as_progressbar=true -force_size_grip=false -iconless_pushbutton=true -iconless_menu=false -disabled_icon_opacity=100 -lxqtmainmenu_iconsize=0 -normal_default_pushbutton=true -single_top_toolbar=false -tint_on_mouseover=0 -transparent_pcmanfm_sidepane=true -transparent_pcmanfm_view=false -blur_translucent=true -centered_forms=false -kinetic_scrolling=false -middle_click_scroll=false -no_selection_tint=false -noninteger_translucency=false -style_vertical_toolbars=false -blur_only_active_window=false - -[Window] -interior=true -interior.element=window -frame.top=0 -frame.bottom=0 -frame.left=0 -frame.right=0 diff --git a/roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.svg b/roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.svg deleted file mode 100644 index a029b1c..0000000 --- a/roles/kvantum/files/Catppuccin-Frappe-Rosewater/Catppuccin-Frappe-Rosewater.svg +++ /dev/null @@ -1,1958 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/roles/kvantum/files/Catppuccin-Frappe-Rosewater/LICENSE b/roles/kvantum/files/Catppuccin-Frappe-Rosewater/LICENSE deleted file mode 100644 index 006383b..0000000 --- a/roles/kvantum/files/Catppuccin-Frappe-Rosewater/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Catppuccin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/roles/kvantum/files/kvantum.kvconfig b/roles/kvantum/files/kvantum.kvconfig deleted file mode 100644 index 14acad4..0000000 --- a/roles/kvantum/files/kvantum.kvconfig +++ /dev/null @@ -1,2 +0,0 @@ -[General] -theme=Catppuccin-Macchiato-Rosewater diff --git a/roles/kvantum/tasks/main.yml b/roles/kvantum/tasks/main.yml deleted file mode 100644 index 540808c..0000000 --- a/roles/kvantum/tasks/main.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: "[Kvantum] Install" - kewlfft.aur.aur: - name: - - kvantum-qt5-git - state: present - -- name: "[Kvantum] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/Kvantum" - state: directory - -- name: "[Kvantum] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/Kvantum" diff --git a/roles/minegrub/tasks/main.yml b/roles/minegrub/tasks/main.yml deleted file mode 100644 index 59efed9..0000000 --- a/roles/minegrub/tasks/main.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: "[Minegrub] Install" - ansible.builtin.copy: - src: "./" - dest: "/boot/grub/themes/" - force: false - become: true - -- name: "[Minegrub] Configure" - shell: sed -i '/^\(#\)\?GRUB_THEME/ s~.*~GRUB_THEME=/boot/grub/themes/minegrub/theme.txt~' /etc/default/grub - ignore_errors: true - become: true - -- name: "[Minegrub] Updating grub" - shell: grub-mkconfig -o /boot/grub/grub.cfg - ignore_errors: true - become: true diff --git a/roles/nvim/files/.luarc.json b/roles/nvim/files/.luarc.json deleted file mode 100644 index 8415579..0000000 --- a/roles/nvim/files/.luarc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "format.enable": false -} diff --git a/roles/nvim/files/.neoconf.json b/roles/nvim/files/.neoconf.json deleted file mode 100644 index 2d7a81f..0000000 --- a/roles/nvim/files/.neoconf.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "neodev": { - "library": { - "enabled": true, - "plugins": true - } - }, - "neoconf": { - "plugins": { - "lua_ls": { - "enabled": true - } - } - }, - "lspconfig": { - "lua_ls": { - "Lua.format.enable": false - } - } -} diff --git a/roles/nvim/files/.stylua.toml b/roles/nvim/files/.stylua.toml deleted file mode 100644 index bfcffff..0000000 --- a/roles/nvim/files/.stylua.toml +++ /dev/null @@ -1,7 +0,0 @@ -column_width = 120 -line_endings = "Unix" -indent_type = "Spaces" -indent_width = 2 -quote_style = "AutoPreferDouble" -call_parentheses = "None" -collapse_simple_statement = "Always" diff --git a/roles/nvim/tasks/main.yml b/roles/nvim/tasks/main.yml deleted file mode 100644 index 2c9c828..0000000 --- a/roles/nvim/tasks/main.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: "[Nvim] Install" - ansible.builtin.package: - name: - - neovim - state: latest - become: true - -- name: "[Nvim] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/nvim" - state: directory - -- name: "[Nvim] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/nvim" diff --git a/roles/nwg-look/files/.config/gtk-3.0/settings.ini b/roles/nwg-look/files/.config/gtk-3.0/settings.ini deleted file mode 100644 index 4529af6..0000000 --- a/roles/nwg-look/files/.config/gtk-3.0/settings.ini +++ /dev/null @@ -1,17 +0,0 @@ -[Settings] -gtk-theme-name=Catppuccin-Macchiato-Standard-Sapphire-Dark -gtk-icon-theme-name=Papirus -gtk-font-name=CaskaydiaCove Nerd Font 12 -gtk-cursor-theme-name=Breeze -gtk-cursor-theme-size=24 -gtk-toolbar-style=GTK_TOOLBAR_ICONS -gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR -gtk-button-images=0 -gtk-menu-images=0 -gtk-enable-event-sounds=1 -gtk-enable-input-feedback-sounds=0 -gtk-xft-antialias=1 -gtk-xft-hinting=1 -gtk-xft-hintstyle=hintslight -gtk-xft-rgba=rgb -gtk-application-prefer-dark-theme=0 diff --git a/roles/nwg-look/files/.config/xsettingsd/xsettingsd.conf b/roles/nwg-look/files/.config/xsettingsd/xsettingsd.conf deleted file mode 100644 index 2daf23c..0000000 --- a/roles/nwg-look/files/.config/xsettingsd/xsettingsd.conf +++ /dev/null @@ -1,9 +0,0 @@ -Net/ThemeName "Catppuccin-Macchiato-Standard-Sapphire-Dark" -Net/IconThemeName "Papirus" -Gtk/CursorThemeName "Breeze" -Net/EnableEventSounds 1 -EnableInputFeedbackSounds 0 -Xft/Antialias 1 -Xft/Hinting 1 -Xft/HintStyle "hintslight" -Xft/RGBA "rgb" diff --git a/roles/nwg-look/files/.gtkrc-2.0 b/roles/nwg-look/files/.gtkrc-2.0 deleted file mode 100644 index a77960c..0000000 --- a/roles/nwg-look/files/.gtkrc-2.0 +++ /dev/null @@ -1,19 +0,0 @@ -# DO NOT EDIT! This file will be overwritten by nwg-look. -# Any customization should be done in ~/.gtkrc-2.0.mine instead. - -include "/home/keule/.gtkrc-2.0.mine" -gtk-theme-name="Catppuccin-Macchiato-Standard-Sapphire-Dark" -gtk-icon-theme-name="Papirus" -gtk-font-name="CaskaydiaCove Nerd Font 12" -gtk-cursor-theme-name="Breeze" -gtk-cursor-theme-size=24 -gtk-toolbar-style=GTK_TOOLBAR_ICONS -gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR -gtk-button-images=0 -gtk-menu-images=0 -gtk-enable-event-sounds=1 -gtk-enable-input-feedback-sounds=0 -gtk-xft-antialias=1 -gtk-xft-hinting=1 -gtk-xft-hintstyle="hintslight" -gtk-xft-rgba="rgb" diff --git a/roles/nwg-look/tasks/main.yml b/roles/nwg-look/tasks/main.yml deleted file mode 100644 index e8da518..0000000 --- a/roles/nwg-look/tasks/main.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- name: "[NWG-look] Install" - kewlfft.aur.aur: - name: - - nwg-look - state: present - -- name: "[NWG-look] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/" diff --git a/roles/qt5ct/files/qt5ct.conf b/roles/qt5ct/files/qt5ct.conf deleted file mode 100644 index d59646b..0000000 --- a/roles/qt5ct/files/qt5ct.conf +++ /dev/null @@ -1,32 +0,0 @@ -[Appearance] -color_scheme_path=/usr/share/qt5ct/colors/darker.conf -custom_palette=false -icon_theme=Papirus -standard_dialogs=default -style=kvantum-dark - -[Fonts] -fixed="CaskaydiaCove Nerd Font Mono,12,-1,5,50,0,0,0,0,0,Regular" -general="CaskaydiaCove Nerd Font,12,-1,5,50,0,0,0,0,0,Regular" - -[Interface] -activate_item_on_single_click=1 -buttonbox_layout=0 -cursor_flash_time=1000 -dialog_buttons_have_icons=1 -double_click_interval=400 -gui_effects=@Invalid() -keyboard_scheme=2 -menus_have_icons=true -show_shortcuts_in_context_menus=true -stylesheets=@Invalid() -toolbutton_style=4 -underline_shortcut=1 -wheel_scroll_lines=3 - -[SettingsWindow] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\a\x80\0\0\0\0\0\0\fw\0\0\x2\xb7\0\0\0\0\0\0\0\0\0\0\x4\xff\0\0\x2\xbe\0\0\0\0\x2\0\0\0\n\0\0\0\a\x80\0\0\0\0\0\0\fw\0\0\x2\xb7) - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/roles/qt5ct/tasks/main.yml b/roles/qt5ct/tasks/main.yml deleted file mode 100644 index 428476f..0000000 --- a/roles/qt5ct/tasks/main.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: "[QT5CT] Install" - kewlfft.aur.aur: - name: - - qt5ct - state: present - -- name: "[QT5CT] Create config folder" - ansible.builtin.file: - mode: "0755" - path: "{{ ansible_user_dir }}/.config/qt5ct" - state: directory - -- name: "[QT5CT] Configure" - ansible.builtin.copy: - src: "./" - dest: "{{ ansible_user_dir }}/.config/qt5ct" diff --git a/roles/sddm/files/sddm.conf.d/default.conf b/roles/sddm/files/sddm.conf.d/default.conf deleted file mode 100755 index ba64598..0000000 --- a/roles/sddm/files/sddm.conf.d/default.conf +++ /dev/null @@ -1,139 +0,0 @@ -[Autologin] -# Whether sddm should automatically log back into sessions when they exit -Relogin=false - -# Name of session file for autologin session (if empty try last logged in) -Session= - -# Username for autologin session -User= - - -[General] -# Which display server should be used. -# Valid values are: x11, x11-user, wayland. Wayland support is experimental -DisplayServer=x11 - -# Comma-separated list of environment variables to be set -GreeterEnvironment= - -# Halt command -HaltCommand=/usr/bin/systemctl poweroff - -# Input method module -InputMethod= - -# Comma-separated list of Linux namespaces for user session to enter -Namespaces= - -# Initial NumLock state. Can be on, off or none. -# If property is set to none, numlock won't be changed -# NOTE: Currently ignored if autologin is enabled. -Numlock=on - -# Reboot command -RebootCommand=/usr/bin/systemctl reboot - - -[Theme] -# Current theme name -Current=catppuccin-macchiato - -# Cursor size used in the greeter -CursorSize=24 - -# Cursor theme used in the greeter -CursorTheme=Breeze - -# Number of users to use as threshold -# above which avatars are disabled -# unless explicitly enabled with EnableAvatars -DisableAvatarsThreshold=7 - -# Enable display of custom user avatars -EnableAvatars=true - -# Global directory for user avatars -# The files should be named .face.icon -FacesDir=/usr/share/sddm/faces - -# Font used in the greeter -Font=CaskaydiaCove Nerd Font 12 - -# Theme directory path -ThemeDir=/usr/share/sddm/themes - - -[Users] -# Default $PATH for logged in users -DefaultPath=/usr/local/sbin:/usr/local/bin:/usr/bin - -# Comma-separated list of shells. -# Users with these shells as their default won't be listed -HideShells= - -# Comma-separated list of users that should not be listed -HideUsers= - -# Maximum user id for displayed users -MaximumUid=60513 - -# Minimum user id for displayed users -MinimumUid=1000 - -# Remember the session of the last successfully logged in user -RememberLastSession=true - -# Remember the last successfully logged in user -RememberLastUser=true - -# When logging in as the same user twice, restore the original session, rather than create a new one -ReuseSession=true - - -[Wayland] -# Path of the Wayland compositor to execute when starting the greeter -CompositorCommand=weston --shell=fullscreen-shell.so - -# Enable Qt's automatic high-DPI scaling -EnableHiDPI=true - -# Path to a script to execute when starting the desktop session -SessionCommand=/usr/share/sddm/scripts/wayland-session - -# Comma-separated list of directories containing available Wayland sessions -SessionDir=/usr/local/share/wayland-sessions,/usr/share/wayland-sessions - -# Path to the user session log file -SessionLogFile=.local/share/sddm/wayland-session.log - - -[X11] -# Path to a script to execute when starting the display server -DisplayCommand=/usr/share/sddm/scripts/Xsetup - -# Path to a script to execute when stopping the display server -DisplayStopCommand=/usr/share/sddm/scripts/Xstop - -# Enable Qt's automatic high-DPI scaling -EnableHiDPI=true - -# Arguments passed to the X server invocation -ServerArguments=-nolisten tcp - -# Path to X server binary -ServerPath=/usr/bin/X - -# Path to a script to execute when starting the desktop session -SessionCommand=/usr/share/sddm/scripts/Xsession - -# Comma-separated list of directories containing available X sessions -SessionDir=/usr/local/share/xsessions,/usr/share/xsessions - -# Path to the user session log file -SessionLogFile=.local/share/sddm/xorg-session.log - -# Path to Xephyr binary -XephyrPath=/usr/bin/Xephyr - - diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/Clock.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/Clock.qml deleted file mode 100644 index f076d28..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/Clock.qml +++ /dev/null @@ -1,14 +0,0 @@ -import QtQuick 2.15 -import SddmComponents 2.0 - -Clock { - id: time - color: config.text - timeFont.family: config.Font - dateFont.family: config.Font - anchors { - margins: 10 - top: parent.top - right: parent.right - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/LoginPanel.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/LoginPanel.qml deleted file mode 100644 index e0dec79..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/LoginPanel.qml +++ /dev/null @@ -1,147 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 - -Item { - property var user: userField.text - property var password: passwordField.text - property var session: sessionPanel.session - property var inputHeight: Screen.height * 0.032 - property var inputWidth: Screen.width * 0.16 - Rectangle { - id: loginBackground - anchors { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter - } - height: inputHeight * 5.3 - width: inputWidth * 1.2 - radius: 5 - visible: config.LoginBackground == "true" ? true : false - color: config.mantle - } - Column { - spacing: 8 - anchors { - bottom: parent.bottom - left: parent.left - } - PowerButton { - id: powerButton - } - RebootButton { - id: rebootButton - } - SleepButton { - id: sleepButton - } - z: 5 - } - Column { - spacing: 8 - anchors { - bottom: parent.bottom - right: parent.right - } - SessionPanel { - id: sessionPanel - } - z: 5 - } - Column { - spacing: 8 - z: 5 - width: inputWidth - anchors { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter - } - UserField { - id: userField - height: inputHeight - width: parent.width - } - PasswordField { - id: passwordField - height: inputHeight - width: parent.width - onAccepted: loginButton.clicked() - } - Button { - id: loginButton - height: inputHeight - width: parent.width - enabled: user != "" && password != "" ? true : false - hoverEnabled: true - contentItem: Text { - id: buttonText - renderType: Text.NativeRendering - font { - family: config.Font - pointSize: config.FontSize - bold: true - } - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: config.crust - text: "Login" - } - background: Rectangle { - id: buttonBackground - color: config.sapphire - radius: 3 - } - states: [ - State { - name: "pressed" - when: loginButton.down - PropertyChanges { - target: buttonBackground - color: config.teal - } - PropertyChanges { - target: buttonText - } - }, - State { - name: "hovered" - when: loginButton.hovered - PropertyChanges { - target: buttonBackground - color: config.teal - } - PropertyChanges { - target: buttonText - } - }, - State { - name: "enabled" - when: loginButton.enabled - PropertyChanges { - target: buttonBackground - } - PropertyChanges { - target: buttonText - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 300 - } - } - onClicked: { - sddm.login(user, password, session) - } - } - } - Connections { - target: sddm - - function onLoginFailed() { - passwordField.text = "" - passwordField.focus = true - } - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/PasswordField.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/PasswordField.qml deleted file mode 100644 index dd0f384..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/PasswordField.qml +++ /dev/null @@ -1,48 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 - -TextField { - id: passwordField - focus: true - selectByMouse: true - placeholderText: "Password" - echoMode: TextInput.Password - passwordCharacter: "•" - passwordMaskDelay: config.PasswordShowLastLetter - selectionColor: config.overlay0 - renderType: Text.NativeRendering - font.family: config.Font - font.pointSize: config.FontSize - font.bold: true - color: config.text - horizontalAlignment: TextInput.AlignHCenter - background: Rectangle { - id: passFieldBackground - radius: 3 - color: config.surface0 - } - states: [ - State { - name: "focused" - when: passwordField.activeFocus - PropertyChanges { - target: passFieldBackground - color: config.surface1 - } - }, - State { - name: "hovered" - when: passwordField.hovered - PropertyChanges { - target: passFieldBackground - color: config.surface1 - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 300 - } - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/PowerButton.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/PowerButton.qml deleted file mode 100644 index dc74269..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/PowerButton.qml +++ /dev/null @@ -1,41 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 - -Item { - implicitHeight: powerButton.height - implicitWidth: powerButton.width - Button { - id: powerButton - height: inputHeight - width: inputHeight - hoverEnabled: true - icon { - source: Qt.resolvedUrl("../icons/power.svg") - height: height - width: width - color: config.crust - } - background: Rectangle { - id: powerButtonBackground - radius: 3 - color: config.red - } - states: [ - State { - name: "hovered" - when: powerButton.hovered - PropertyChanges { - target: powerButtonBackground - color: config.rosewater - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 300 - } - } - onClicked: sddm.powerOff() - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/RebootButton.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/RebootButton.qml deleted file mode 100644 index a2c9b9f..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/RebootButton.qml +++ /dev/null @@ -1,41 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 - -Item { - implicitHeight: rebootButton.height - implicitWidth: rebootButton.width - Button { - id: rebootButton - height: inputHeight - width: inputHeight - hoverEnabled: true - icon { - source: Qt.resolvedUrl("../icons/reboot.svg") - height: height - width: width - color: config.crust - } - background: Rectangle { - id: rebootButtonBackground - radius: 3 - color: config.red - } - states: [ - State { - name: "hovered" - when: rebootButton.hovered - PropertyChanges { - target: rebootButtonBackground - color: config.rosewater - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 300 - } - } - onClicked: sddm.reboot() - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/SessionPanel.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/SessionPanel.qml deleted file mode 100644 index 0edfcb3..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/SessionPanel.qml +++ /dev/null @@ -1,156 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQml.Models 2.15 - -Item { - property var session: sessionList.currentIndex - implicitHeight: sessionButton.height - implicitWidth: sessionButton.width - DelegateModel { - id: sessionWrapper - model: sessionModel - delegate: ItemDelegate { - id: sessionEntry - height: inputHeight - width: parent.width - highlighted: sessionList.currentIndex == index - contentItem: Text { - renderType: Text.NativeRendering - font.family: config.Font - font.pointSize: config.FontSize - font.bold: true - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: config.text - text: name - } - background: Rectangle { - id: sessionEntryBackground - color: config.surface1 - radius: 3 - } - states: [ - State { - name: "hovered" - when: sessionEntry.hovered - PropertyChanges { - target: sessionEntryBackground - color: config.surface2 - } - } - ] - transitions: Transition { - PropertyAnimation { - property: "color" - duration: 300 - } - } - MouseArea { - anchors.fill: parent - onClicked: { - sessionList.currentIndex = index - sessionPopup.close() - } - } - } - } - Button { - id: sessionButton - height: inputHeight - width: inputHeight - hoverEnabled: true - icon { - source: Qt.resolvedUrl("../icons/settings.svg") - height: height - width: width - color: config.text - } - background: Rectangle { - id: sessionButtonBackground - color: config.surface0 - radius: 3 - } - states: [ - State { - name: "pressed" - when: sessionButton.down - PropertyChanges { - target: sessionButtonBackground - color: config.surface1 - } - }, - State { - name: "hovered" - when: sessionButton.hovered - PropertyChanges { - target: sessionButtonBackground - color: config.surface2 - } - }, - State { - name: "selection" - when: sessionPopup.visible - PropertyChanges { - target: sessionButtonBackground - color: config.surface2 - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 150 - } - } - onClicked: { - sessionPopup.visible ? sessionPopup.close() : sessionPopup.open() - sessionButton.state = "pressed" - } - } - Popup { - id: sessionPopup - width: inputWidth + padding * 2 - x: (sessionButton.width + sessionList.spacing) * -7.6 - y: -(contentHeight + padding * 2) + sessionButton.height - padding: inputHeight / 10 - background: Rectangle { - radius: 5.4 - color: config.surface0 - } - contentItem: ListView { - id: sessionList - implicitHeight: contentHeight - spacing: 8 - model: sessionWrapper - currentIndex: sessionModel.lastIndex - clip: true - } - enter: Transition { - ParallelAnimation { - NumberAnimation { - property: "opacity" - from: 0 - to: 1 - duration: 400 - easing.type: Easing.OutExpo - } - NumberAnimation { - property: "x" - from: sessionPopup.x + (inputWidth * 0.1) - to: sessionPopup.x - duration: 500 - easing.type: Easing.OutExpo - } - } - } - exit: Transition { - NumberAnimation { - property: "opacity" - from: 1 - to: 0 - duration: 300 - easing.type: Easing.OutExpo - } - } - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/SleepButton.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/SleepButton.qml deleted file mode 100644 index f4a4b7a..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/SleepButton.qml +++ /dev/null @@ -1,41 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 - -Item { - implicitHeight: sleepButton.height - implicitWidth: sleepButton.width - Button { - id: sleepButton - height: inputHeight - width: inputHeight - hoverEnabled: true - icon { - source: Qt.resolvedUrl("../icons/sleep.svg") - height: height - width: width - color: config.crust - } - background: Rectangle { - id: sleepButtonBg - color: config.red - radius: 3 - } - states: [ - State { - name: "hovered" - when: sleepButton.hovered - PropertyChanges { - target: sleepButtonBg - color: config.rosewater - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 300 - } - } - onClicked: sddm.suspend() - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Components/UserField.qml b/roles/sddm/files/themes/catppuccin-macchiato/Components/UserField.qml deleted file mode 100644 index 9f8ca61..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Components/UserField.qml +++ /dev/null @@ -1,50 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 - -TextField { - id: userField - height: inputHeight - width: inputWidth - selectByMouse: true - echoMode: TextInput.Normal - selectionColor: config.overlay0 - renderType: Text.NativeRendering - font { - family: config.Font - pointSize: config.FontSize - bold: true - } - color: config.text - horizontalAlignment: Text.AlignHCenter - placeholderText: "Username" - text: userModel.lastUser - background: Rectangle { - id: userFieldBackground - color: config.surface0 - radius: 3 - } - states: [ - State { - name: "focused" - when: userField.activeFocus - PropertyChanges { - target: userFieldBackground - color: config.surface1 - } - }, - State { - name: "hovered" - when: userField.hovered - PropertyChanges { - target: userFieldBackground - color: config.surface1 - } - } - ] - transitions: Transition { - PropertyAnimation { - properties: "color" - duration: 300 - } - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/LICENSE b/roles/sddm/files/themes/catppuccin-macchiato/LICENSE deleted file mode 100644 index 006383b..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Catppuccin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/roles/sddm/files/themes/catppuccin-macchiato/Main.qml b/roles/sddm/files/themes/catppuccin-macchiato/Main.qml deleted file mode 100644 index 422054b..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/Main.qml +++ /dev/null @@ -1,48 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Window 2.15 -import QtQuick.Controls 2.15 -import "Components" - -Item { - id: root - height: Screen.height - width: Screen.width - Rectangle { - id: background - anchors.fill: parent - height: parent.height - width: parent.width - z: 0 - color: config.base - } - Image { - id: backgroundImage - anchors.fill: parent - height: parent.height - width: parent.width - fillMode: Image.PreserveAspectCrop - visible: config.CustomBackground == "true" ? true : false - z: 1 - source: config.Background - asynchronous: false - cache: true - mipmap: true - clip: true - } - Item { - id: mainPanel - z: 3 - anchors { - fill: parent - margins: 50 - } - Clock { - id: time - visible: config.ClockEnabled == "true" ? true : false - } - LoginPanel { - id: loginPanel - anchors.fill: parent - } - } -} diff --git a/roles/sddm/files/themes/catppuccin-macchiato/assets/angle-down.png b/roles/sddm/files/themes/catppuccin-macchiato/assets/angle-down.png deleted file mode 100644 index f621bfc936c189c682115e5e313604f894187b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6488 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 S60ELLOnESU7-h~IQvVM*H=8>E diff --git a/roles/sddm/files/themes/catppuccin-macchiato/backgrounds/.gitkeep b/roles/sddm/files/themes/catppuccin-macchiato/backgrounds/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/roles/sddm/files/themes/catppuccin-macchiato/icons/power.svg b/roles/sddm/files/themes/catppuccin-macchiato/icons/power.svg deleted file mode 100644 index 70495dd..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/icons/power.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/roles/sddm/files/themes/catppuccin-macchiato/icons/reboot.svg b/roles/sddm/files/themes/catppuccin-macchiato/icons/reboot.svg deleted file mode 100644 index 5506bbb..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/icons/reboot.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/roles/sddm/files/themes/catppuccin-macchiato/icons/settings.svg b/roles/sddm/files/themes/catppuccin-macchiato/icons/settings.svg deleted file mode 100644 index 9a64fbd..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/icons/settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/roles/sddm/files/themes/catppuccin-macchiato/icons/sleep.svg b/roles/sddm/files/themes/catppuccin-macchiato/icons/sleep.svg deleted file mode 100644 index 4102f2d..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/icons/sleep.svg +++ /dev/null @@ -1,5 +0,0 @@ - - -moon - - \ No newline at end of file diff --git a/roles/sddm/files/themes/catppuccin-macchiato/metadata.desktop b/roles/sddm/files/themes/catppuccin-macchiato/metadata.desktop deleted file mode 100644 index d6693d5..0000000 --- a/roles/sddm/files/themes/catppuccin-macchiato/metadata.desktop +++ /dev/null @@ -1,14 +0,0 @@ -[SddmGreeterTheme] -Name=Catppuccin macchiato -Description=Soothing pastel theme for SDDM -Type=sddm-theme -Version=2.1 -Website=https://github.com/catppuccin/sddm -Screenshot=preview.png -MainScript=Main.qml -ConfigFile=theme.conf -TranslationsDirectory=translations -Theme-Id=Catppuccin -Theme-API=2.0 -License=MIT -QtVersion=6 diff --git a/roles/sddm/files/themes/catppuccin-macchiato/preview.png b/roles/sddm/files/themes/catppuccin-macchiato/preview.png deleted file mode 100644 index bc262d2ecf8b2a0f040872f51d4e3e4ea08eeeb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34689 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 dFJ=_h/dev/null 2>&1 || missing+=("$1") +} + +need_cmd sudo +need_cmd git +need_cmd curl +need_cmd age +need_cmd jq +need_cmd pacman || need_cmd apt-get +need_cmd chezmoi + +if (( ${#missing[@]} > 0 )); then + cat <>> Missing prerequisites: ${missing[*]} + +Install them for your distro, then re-run \`chezmoi apply\`: + + Arch: sudo pacman -S --needed git curl sudo age jq + Ubuntu: sudo apt-get install -y git curl sudo age jq + +\`age\` is also available at https://github.com/FiloSottile/age as a static +binary if your distro does not package it. +EOF + exit 1 +fi + +echo ">>> prereqs OK" diff --git a/run_once_10-install-base.sh b/run_once_10-install-base.sh new file mode 100755 index 0000000..8e35c9c --- /dev/null +++ b/run_once_10-install-base.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# run_once_10-install-base.sh +# Installs base and some programming packages + +set -euo pipefail + +SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" +DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" + +case "$DISTRO_ID" in + arch) + echo ">>> [base] arch, system=$SYS" + + sudo pacman -Syu --noconfirm + + sudo pacman -S --noconfirm --needed \ + networkmanager networkmanager-openvpn wireguard-tools fastfetch \ + inotify-tools libqalculate cifs-utils reflector os-prober ntfs-3g \ + openssh upower expac unzip less curl wget gawk zip tar \ + eza bat fzf fd jq go + + if [ "$SYS" != "server" ]; then + sudo pacman -S --noconfirm --needed \ + jdk-openjdk maven rustup npm + rustup default stable >/dev/null 2>&1 || true + fi + + # AUR helper + if ! command -v yay >/dev/null 2>&1; then + sudo pacman -S --noconfirm --needed base-devel + tmp=$(mktemp -d) + git clone https://aur.archlinux.org/yay.git "$tmp" + ( cd "$tmp" && makepkg -si --noconfirm ) + rm -rf "$tmp" + fi + ;; + + ubuntu) + echo ">>> [base] ubuntu, system=$SYS" + + sudo apt-get update + sudo apt-get upgrade -y + + sudo apt-get install -y \ + network-manager openvpn wireguard-tools inotify-tools libqalculate \ + cifs-utils os-prober ntfs-3g openssh upower unzip less curl wget \ + gawk zip tar fzf fd-find jq + + # fdfind → fd compatibility symlink + # if command -v fdfind >/dev/null 2>&1 && ! command -v fd >/dev/null 2>&1; then + # sudo ln -sf "$(command -v fdfind)" /usr/local/bin/fd + # fi + + if [ "$SYS" != "server" ]; then + sudo apt-get install -y \ + openjdk-17-jdk maven rustup npm golang-go + rustup default stable >/dev/null 2>&1 || true + fi + ;; + + *) + echo ">>> [base] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [base] done" diff --git a/run_once_20-install-gui.sh b/run_once_20-install-gui.sh new file mode 100755 index 0000000..f0a727d --- /dev/null +++ b/run_once_20-install-gui.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# run_once_20-install-gui.sh +# Hyprland and all other GUI/desktop environment packages + +set -euo pipefail + +SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" +DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" + +if [ "$SYS" = "server" ]; then + echo ">>> [gui] system=server, skipping" + exit 0 +fi + +case "$DISTRO_ID" in + arch) + echo ">>> [gui] arch, system=$SYS" + + sudo pacman -S --noconfirm --needed \ + noto-fonts noto-fonts-cjk noto-fonts-emoji ttf-font-awesome nerd-fonts \ + pipewire wireplumber pipewire-alsa pipewire-audio pipewire-jack \ + pipewire-pulse gst-plugin-pipewire qt6-multimedia \ + network-manager-applet \ + bluez bluez-utils blueman gnome-bluetooth-3.0 \ + cups cups-pdf cups-pk-helper \ + qt5ct qt6ct \ + papirus-icon-theme breeze-cursors adw-gtk-theme \ + brightnessctl playerctl libnotify mediainfo btop \ + fprintd kimageformats \ + cliphist wl-clipboard \ + polkit-kde-agent xdg-desktop-portal-hyprland gnome-keyring \ + hyprland greetd ghostty + + yay -S --noconfirm greetd-dms-greeter-git dankcalendar-git vesktop-git + + + sudo -v && curl -fsSL https://install.danklinux.com | sh -s -- -c hyprland -t ghostty --include-deps dms-greeter -y + + fi + ;; + + ubuntu) + echo ">>> [gui] ubuntu, system=$SYS" + echo ">>> [gui] ubuntu, no GUI packages" + ;; + + *) + echo ">>> [gui] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [gui] done" diff --git a/run_once_30-install-power-mgmt.sh b/run_once_30-install-power-mgmt.sh new file mode 100755 index 0000000..5c25304 --- /dev/null +++ b/run_once_30-install-power-mgmt.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# run_once_30-install-power-mgmt.sh +# Laptop-only: power management stack. Skipped on desktop/server. + +set -euo pipefail + +SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" +DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" + +if [ "$SYS" != "laptop" ]; then + echo ">>> [power-mgmt] system=$SYS, skipping (not a laptop)" + exit 0 +fi + +case "$DISTRO_ID" in + arch) + echo ">>> [power-mgmt] arch" + + sudo pacman -S --noconfirm --needed tlp auto-cpufreq power-profiles-daemon + sudo systemctl enable tlp + sudo systemctl enable auto-cpufreq + sudo systemctl enable power-profiles-daemon + ;; + + ubuntu) + echo ">>> [power-mgmt] ubuntu" + + sudo apt-get install -y tlp tlp-rdw power-profiles-daemon + sudo systemctl enable tlp + # tlp and power-profiles-daemon conflict on most hardware — mask the latter + sudo systemctl mask power-profiles-daemon || true + ;; + + *) + echo ">>> [power-mgmt] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [power-mgmt] done" diff --git a/run_once_40-install-apps.sh b/run_once_40-install-apps.sh new file mode 100755 index 0000000..c733deb --- /dev/null +++ b/run_once_40-install-apps.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# run_once_40-install-apps.sh +# Desktop applications. Skipped on server. + +set -euo pipefail + +SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" +DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" + +if [ "$SYS" = "server" ]; then + echo ">>> [apps] system=server, skipping" + exit 0 +fi + +case "$DISTRO_ID" in + arch) + echo ">>> [apps] arch, system=$SYS" + + # Repo packages + sudo pacman -S --noconfirm --needed \ + libreoffice-fresh nextcloud-client \ + gvfs gvfs-mtp gvfs-smb thunar tumbler \ + mpv nvtop pavucontrol thunderbird firefox yt-dlp + + # AUR packages + yay -S --noconfirm --needed \ + appimagelauncher feishin-appimage \ + vscodium-bin obsidian brave-bin + ;; + + ubuntu) + echo ">>> [apps] ubuntu, system=$SYS" + + sudo apt-get install -y \ + libreoffice nextcloud-desktop \ + mpv nvtop pavucontrol thunderbird firefox yt-dlp + + echo ">>> [apps] TODO: install via Flatpak/Snap — feishin, ..." + ;; + + *) + echo ">>> [apps] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [apps] done" diff --git a/run_once_50-configure-system.sh b/run_once_50-configure-system.sh new file mode 100755 index 0000000..2e8eb90 --- /dev/null +++ b/run_once_50-configure-system.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# run_once_50-configure-system.sh +# System-level config, enable services and set some settings + +set -euo pipefail + +SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" +DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" +SRC="$(chezmoi source-path)" +echo ">>> [configure] distro=$DISTRO_ID, system=$SYS, source=$SRC" + +case "$DISTRO_ID" in + arch) + # pacman.conf — everyone on arch + sudo install -m644 "$SRC/assets/pacman.conf" /etc/pacman.conf + + # MAKEFLAGS — everyone on arch + sudo sed -i 's/^#MAKEFLAGS=/MAKEFLAGS="-j'"$(nproc)"'"/' /etc/makepkg.conf + + if [ "$SYS" != "server" ]; then + sudo systemctl enable bluetooth cups greetd + + # minegrub GRUB theme (best-effort) + if [ -d /boot/grub/themes ]; then + sudo mkdir -p /boot/grub/themes/minegrub + sudo cp -r "$SRC/assets/minegrub/." /boot/grub/themes/minegrub/ + if ! grep -q '^GRUB_THEME=' /etc/default/grub 2>/dev/null; then + echo 'GRUB_THEME="/boot/grub/themes/minegrub/theme.txt"' \ + | sudo tee -a /etc/default/grub >/dev/null + sudo grub-mkconfig -o /boot/grub/grub.cfg + fi + else + echo ">>> [configure] /boot/grub/themes missing — skipping minegrub install" + fi + fi + ;; + + ubuntu) + echo ">>> [ubuntu] no configure system" + ;; + + *) + echo ">>> [configure] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [configure] done" diff --git a/run_once_99-set-shell.sh b/run_once_99-set-shell.sh new file mode 100755 index 0000000..a3f5148 --- /dev/null +++ b/run_once_99-set-shell.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# run_once_99-set-shell.sh +# Sets the user's default login shell to fish. + +set -euo pipefail + +if ! command -v fish >/dev/null 2>&1; then + echo ">>> [set-shell] fish not installed; skipping" + exit 0 +fi + +USER_NAME="${USER:-$(id -un)}" +current_shell="$(getent passwd "$USER_NAME" | cut -d: -f7)" + +if [ "$current_shell" = "$(command -v fish)" ]; then + echo ">>> [set-shell] shell already set to fish" + exit 0 +fi + +echo ">>> [set-shell] changing shell for $USER_NAME to $(command -v fish)" +sudo chsh -s "$(command -v fish)" "$USER_NAME" || true