├── .chezmoiroot ├── home ├── pictures │ ├── screenshots │ │ └── .keep │ └── wallpapers │ │ └── Tokyo Night Abstract.png ├── dot_dmrc ├── documents │ └── envs │ │ ├── env_list.txt │ │ ├── executable_env_runner.sh │ │ ├── README.md │ │ └── env_script.py ├── dot_config │ ├── rofi │ │ ├── config.rasi │ │ └── tokyo-night.rasi │ ├── exact_nvim │ │ ├── exact_lua │ │ │ ├── exact_plugins │ │ │ │ ├── gitgutter.lua │ │ │ │ ├── lspconfig.lua │ │ │ │ ├── glyph-palette.lua │ │ │ │ ├── chezmoi.lua │ │ │ │ ├── vim-lastplace.lua │ │ │ │ ├── nvim-dev-webicons.lua │ │ │ │ ├── indent-blankline.lua │ │ │ │ ├── tokyo-night.lua │ │ │ │ ├── colorizer.lua │ │ │ │ ├── conform.lua │ │ │ │ ├── telescope.lua │ │ │ │ ├── lazydev.lua │ │ │ │ ├── barbecue.lua │ │ │ │ ├── whichkey.lua │ │ │ │ ├── lualine.lua │ │ │ │ ├── treesitter.lua │ │ │ │ ├── autolist.lua │ │ │ │ ├── nvim-tree.lua │ │ │ │ ├── vim-tmux-navigator.lua │ │ │ │ ├── aerial.lua │ │ │ │ ├── bufferline.lua │ │ │ │ ├── vimtex.lua.tmpl │ │ │ │ ├── blink-cmp.lua │ │ │ │ └── alpha.lua.tmpl │ │ │ ├── exact_config │ │ │ │ ├── conform.lua │ │ │ │ └── lazy.lua │ │ │ └── keymaps.lua │ │ ├── init.lua │ │ └── lazy-lock.json │ ├── stylua │ │ └── stylua.toml │ ├── polybar │ │ ├── executable_launch.sh │ │ └── config.ini.tmpl │ ├── zathura │ │ ├── executable_zathura-toggle-theme.sh │ │ ├── zathurarc │ │ ├── zathurarc-tokyo-night │ │ └── zathurarc-nord │ ├── gtk-3.0 │ │ └── settings.ini │ ├── user-dirs.dirs │ ├── kitty │ │ ├── kitty.conf │ │ └── tokyo-night.conf │ ├── bspwm │ │ └── executable_bspwmrc.tmpl │ ├── picom │ │ └── picom.conf │ └── sxhkd │ │ └── sxhkdrc.tmpl ├── dot_xprofile ├── dot_gitconfig.tmpl ├── dot_local │ ├── share │ │ └── applications │ │ │ └── nvim.desktop │ └── bin │ │ ├── executable_tm.sh.tmpl │ │ └── executable_desk.sh.tmpl ├── run_install-packages.sh.tmpl ├── dot_bashrc.tmpl ├── .chezmoidata │ └── packages.toml └── .chezmoi.toml.tmpl ├── docs ├── chezmoi-demo.gif ├── empty-layout.png ├── floating-layout.png ├── main-showcase.png ├── tiling-layout.png ├── venv-selector-demo.gif ├── social-preview-github.png ├── venv-selector-demo.tape └── chezmoi-demo.tape ├── extras ├── archinstall.json ├── tabliss-professional.json ├── tabliss-caltech.json └── tabliss-personal.json ├── LICENSE └── README.md /.chezmoiroot: -------------------------------------------------------------------------------- 1 | home 2 | -------------------------------------------------------------------------------- /home/pictures/screenshots/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /home/dot_dmrc: -------------------------------------------------------------------------------- 1 | [Desktop] 2 | Session=bspwm 3 | -------------------------------------------------------------------------------- /home/documents/envs/env_list.txt: -------------------------------------------------------------------------------- 1 | Diff-PFM 2 | ML 3 | Manim 4 | Test 5 | Test2 6 | -------------------------------------------------------------------------------- /docs/chezmoi-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/chezmoi-demo.gif -------------------------------------------------------------------------------- /docs/empty-layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/empty-layout.png -------------------------------------------------------------------------------- /docs/floating-layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/floating-layout.png -------------------------------------------------------------------------------- /docs/main-showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/main-showcase.png -------------------------------------------------------------------------------- /docs/tiling-layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/tiling-layout.png -------------------------------------------------------------------------------- /home/dot_config/rofi/config.rasi: -------------------------------------------------------------------------------- 1 | // Loads Tokyo Night Theme 2 | @theme "~/.config/rofi/tokyo-night.rasi" 3 | -------------------------------------------------------------------------------- /docs/venv-selector-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/venv-selector-demo.gif -------------------------------------------------------------------------------- /docs/social-preview-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/docs/social-preview-github.png -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/gitgutter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "airblade/vim-gitgutter", 3 | } 4 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/lspconfig.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "neovim/nvim-lspconfig", 3 | } 4 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/glyph-palette.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "lambdalisue/vim-glyph-palette", 3 | } 4 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/chezmoi.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "alker0/chezmoi.vim", 3 | lazy = false, 4 | } 5 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/vim-lastplace.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "farmergreg/vim-lastplace", 3 | lazy = false, 4 | } 5 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/nvim-dev-webicons.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-tree/nvim-web-devicons", 3 | opts = {}, 4 | } 5 | -------------------------------------------------------------------------------- /home/dot_xprofile: -------------------------------------------------------------------------------- 1 | export GTK_IM_MODULE=fcitx5 2 | export QT_IM_MODULE=fcitx5 3 | export XMODIFIERS="@im=fcitx5" 4 | export GLFW_IM_MODULE=ibus 5 | -------------------------------------------------------------------------------- /home/pictures/wallpapers/Tokyo Night Abstract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hudson-liu/dotfiles/HEAD/home/pictures/wallpapers/Tokyo Night Abstract.png -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/indent-blankline.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "lukas-reineke/indent-blankline.nvim", 3 | main = "ibl", 4 | opts = {}, 5 | } 6 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/tokyo-night.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "folke/tokyonight.nvim", 3 | lazy = false, 4 | priority = 1000, 5 | opts = {}, 6 | } 7 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/colorizer.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "norcalli/nvim-colorizer.lua", 3 | ft = { "html", "css", "kitty" }, 4 | opts = { "*" }, 5 | } 6 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/conform.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "stevearc/conform.nvim", 3 | event = "BufWritePre", 4 | opts = require "config.conform", 5 | } 6 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/telescope.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-telescope/telescope.nvim", 3 | tag = "0.1.8", 4 | dependencies = { "nvim-lua/plenary.nvim" }, 5 | } 6 | -------------------------------------------------------------------------------- /home/dot_config/stylua/stylua.toml: -------------------------------------------------------------------------------- 1 | column_width = 120 2 | line_endings = "Unix" 3 | indent_type = "Spaces" 4 | indent_width = 2 5 | quote_style = "AutoPreferDouble" 6 | call_parentheses = "None" 7 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/lazydev.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "folke/lazydev.nvim", 3 | ft = "lua", 4 | opts = { 5 | library = { 6 | { path = "${3rd}/luv/library", words = { "vim%.uv" } }, 7 | }, 8 | }, 9 | } 10 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/barbecue.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "utilyre/barbecue.nvim", 3 | event = "LspAttach", 4 | name = "barbecue", 5 | version = "*", 6 | dependencies = { 7 | "SmiteshP/nvim-navic", 8 | }, 9 | opts = {}, 10 | } 11 | -------------------------------------------------------------------------------- /home/dot_gitconfig.tmpl: -------------------------------------------------------------------------------- 1 | [core] 2 | fileMode = true 3 | [user] 4 | email = {{ .email }} 5 | name = {{ .fullname }} 6 | [filter "lfs"] 7 | clean = git-lfs clean -- %f 8 | smudge = git-lfs smudge -- %f 9 | process = git-lfs filter-process 10 | required = true 11 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_config/conform.lua: -------------------------------------------------------------------------------- 1 | return { 2 | formatters_by_ft = { 3 | lua = { "stylua" }, 4 | tex = { "latexindent" }, 5 | md = { "mdformat" }, 6 | }, 7 | format_on_save = { 8 | timeout_ms = 500, 9 | lsp_format = "fallback", 10 | }, 11 | } 12 | -------------------------------------------------------------------------------- /home/dot_config/polybar/executable_launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Terminate existing bar instances 4 | polybar-msg cmd quit 5 | 6 | # Launch bar 7 | echo "---" | tee -a /tmp/polybar1.log 8 | polybar TokyoNight 2>&1 | tee -a /tmp/polybar1.log & disown 9 | 10 | echo "Bars launched..." 11 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/whichkey.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "folke/which-key.nvim", 3 | event = "VeryLazy", 4 | keys = { 5 | { 6 | "?", 7 | function() 8 | require("which-key").show { global = false } 9 | end, 10 | desc = "Buffer Local Keymaps (which-key)", 11 | }, 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /home/documents/envs/executable_env_runner.sh: -------------------------------------------------------------------------------- 1 | # Shell wrapper for Python environment script. 2 | 3 | mypath="$HOME/documents/envs/" 4 | 5 | cd $mypath 6 | python env_script.py 7 | file="temp" # can be anything, so long as it matches the Python script 8 | if [ -f "$file" ] ; then 9 | value=$(<$file) 10 | source "Env_$value/bin/activate" 11 | rm $file 12 | fi 13 | 14 | cd - 15 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/lualine.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-lualine/lualine.nvim", 3 | dependencies = { "nvim-tree/nvim-web-devicons" }, 4 | opts = { 5 | sections = { 6 | lualine_a = { { "mode", separator = { left = "", right = "" } } }, 7 | lualine_z = { { "location", separator = { left = "", right = "" } } }, 8 | }, 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /home/dot_config/zathura/executable_zathura-toggle-theme.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | switch_to_tokyo_night() { 4 | cp $HOME/.config/zathura/zathurarc-tokyo-night $HOME/.config/zathura/zathurarc 5 | } 6 | 7 | switch_to_nord() { 8 | cp $HOME/.config/zathura/zathurarc-nord $HOME/.config/zathura/zathurarc 9 | } 10 | 11 | if [[ $(grep -ic '# dark mode true' $HOME/.config/zathura/zathurarc) -eq 1 ]]; then 12 | switch_to_nord 13 | else 14 | switch_to_tokyo_night 15 | fi 16 | 17 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/treesitter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-treesitter/nvim-treesitter", 3 | opts = { 4 | ensure_installed = { 5 | "vim", 6 | "lua", 7 | "vimdoc", 8 | "html", 9 | "css", 10 | "python", 11 | "csv", 12 | "cpp", 13 | "c", 14 | "gitignore", 15 | "toml", 16 | "yaml", 17 | "java", 18 | "json", 19 | "markdown", 20 | "vhs", 21 | }, 22 | }, 23 | } 24 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/autolist.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "gaoDean/autolist.nvim", 3 | ft = { 4 | "markdown", 5 | }, 6 | config = function() 7 | require("autolist").setup() 8 | vim.keymap.set("i", "", "AutolistNewBullet") 9 | vim.keymap.set("n", "o", "oAutolistNewBullet") 10 | vim.keymap.set("n", "O", "OAutolistNewBulletBefore") 11 | vim.keymap.set("n", "", "AutolistToggleCheckbox") 12 | end, 13 | } 14 | -------------------------------------------------------------------------------- /home/dot_config/gtk-3.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-theme-name=Tokyonight-Dark 3 | gtk-icon-theme-name=Tokyonight-Moon 4 | gtk-font-name=Cantarell 11 5 | gtk-cursor-theme-size=0 6 | gtk-toolbar-style=GTK_TOOLBAR_BOTH 7 | gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR 8 | gtk-button-images=1 9 | gtk-menu-images=1 10 | gtk-enable-event-sounds=1 11 | gtk-enable-input-feedback-sounds=1 12 | gtk-xft-antialias=1 13 | gtk-xft-hinting=1 14 | gtk-xft-hintstyle=hintfull 15 | gtk-cursor-theme-name=xcursor-breeze-neutral 16 | -------------------------------------------------------------------------------- /home/dot_local/share/applications/nvim.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Neovim 3 | GenericName=Text Editor 4 | Comment=Edit text files 5 | Comment[zh_CN]=编辑文本文件 6 | Exec=kitty nvim %F 7 | Terminal=false 8 | Type=Application 9 | Keywords=Text;editor; 10 | Icon=nvim 11 | Categories=Utility;TextEditor; 12 | StartupNotify=false 13 | MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; 14 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/nvim-tree.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvim-tree/nvim-tree.lua", 3 | lazy = false, 4 | opts = { 5 | hijack_cursor = true, 6 | view = { 7 | width = 25, 8 | }, 9 | sync_root_with_cwd = true, -- CD will also change Nvim-Tree 10 | update_focused_file = { 11 | enable = true, 12 | update_root = true, 13 | }, 14 | actions = { -- Uses "global cd" instead of "lcd" 15 | change_dir = { 16 | global = true, 17 | }, 18 | }, 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /docs/venv-selector-demo.tape: -------------------------------------------------------------------------------- 1 | # A short tape (using charm_ "VHS") demo-ing the Chezmoi install process. 2 | Output Venv-Selector-Demo.gif 3 | 4 | Set FontSize 40 5 | Set Width 2400 6 | Set Height 1000 7 | Set Padding 40 8 | Set Theme "tokyonight" 9 | 10 | # Setup Alias b/c ~/.bashrc isn't executed 11 | Hide 12 | Type "alias v='source ~/Documents/Environments/env_runner.sh'" 13 | Enter 14 | Sleep 50ms 15 | Type "clear" 16 | Enter 17 | Sleep 50ms 18 | Show 19 | 20 | # Initialize Chezmoi 21 | Type "v" 22 | Sleep 500ms 23 | Enter 24 | Sleep 3s 25 | 26 | Type "1" 27 | Sleep 500ms 28 | Enter 29 | Sleep 5s 30 | 31 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/vim-tmux-navigator.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "christoomey/vim-tmux-navigator", 3 | cmd = { 4 | "TmuxNavigateLeft", 5 | "TmuxNavigateDown", 6 | "TmuxNavigateUp", 7 | "TmuxNavigateRight", 8 | "TmuxNavigatePrevious", 9 | "TmuxNavigatorProcessList", 10 | }, 11 | keys = { 12 | { "", "TmuxNavigateLeft" }, 13 | { "", "TmuxNavigateDown" }, 14 | { "", "TmuxNavigateUp" }, 15 | { "", "TmuxNavigateRight" }, 16 | { "", "TmuxNavigatePrevious" }, 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/aerial.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "stevearc/aerial.nvim", 3 | lazy = false, 4 | dependencies = { 5 | "nvim-treesitter/nvim-treesitter", 6 | "nvim-tree/nvim-web-devicons", 7 | }, 8 | opts = { 9 | show_guides = true, 10 | on_attach = function(bufnr) 11 | vim.keymap.set("n", "{", "AerialPrev", { buffer = bufnr }) 12 | vim.keymap.set("n", "}", "AerialNext", { buffer = bufnr }) 13 | end, 14 | layout = { 15 | width = 20, 16 | }, 17 | float = { 18 | relative = "editor", 19 | height = 20, 20 | }, 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/bufferline.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "akinsho/bufferline.nvim", 3 | version = "*", 4 | dependencies = "nvim-tree/nvim-web-devicons", 5 | config = function() 6 | local bufferline = require "bufferline" 7 | bufferline.setup { 8 | options = { 9 | style_preset = bufferline.style_preset.minimal, 10 | themable = false, 11 | hover = { 12 | enabled = true, 13 | delay = 200, 14 | reveal = { "close" }, 15 | }, 16 | indicator = { 17 | style = "underline", 18 | }, 19 | }, 20 | } 21 | end, 22 | } 23 | -------------------------------------------------------------------------------- /home/dot_local/bin/executable_tm.sh.tmpl: -------------------------------------------------------------------------------- 1 | # Starts tmux, opens nvim in target directory 2 | 3 | SESSION="Main-Session" 4 | tmux has-session -t "$SESSION" 2>/dev/null 5 | 6 | 7 | if [ $? != 0 ]; then 8 | {{ if eq .fullname "Hudson Liu" }} 9 | BASE_DIR="$HOME/documents/projects/cpp\ practice" 10 | {{ else }} 11 | BASE_DIR="$HOME/documents" 12 | {{ end }} 13 | tmux new-session -d -s "$SESSION" 14 | tmux send-keys "cd $BASE_DIR && nvim" 15 | tmux split-window -v -p 10 -t "$SESSION" 16 | tmux send-keys "cd $BASE_DIR && ls" C-m 17 | 18 | tmux rename-window -t 0 "Neovim-Main" 19 | tmux select-pane -t "$SESSION:Neovim-Main.0" 20 | fi 21 | 22 | tmux attach -t "$SESSION" 23 | -------------------------------------------------------------------------------- /home/run_install-packages.sh.tmpl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | read -p "Would you like to install/update packages? (y/n) " -n 1 5 | case "$REPLY" in 6 | y|Y) ;; 7 | n|N) 8 | printf "\nokie, proceeding w/o installing... :c\n" 9 | exit 0 10 | ;; 11 | *) 12 | printf "\nInvalid input, proceeding w/o installing.\n" 13 | exit 0 14 | ;; 15 | esac 16 | 17 | # ======[Pacman]====== 18 | pacman_pkgs=" 19 | {{ range .packages.pacman }} 20 | {{ range . }} 21 | {{- . }} 22 | {{ end }} 23 | {{- end }} 24 | " 25 | sudo pacman -S --needed $pacman_pkgs 26 | 27 | # ======[Yay]====== 28 | aur_pkgs="{{ .packages.aur.all | join " " }}" 29 | yay -S --needed $aur_pkgs 30 | 31 | -------------------------------------------------------------------------------- /home/dot_config/user-dirs.dirs: -------------------------------------------------------------------------------- 1 | # This file is written by xdg-user-dirs-update 2 | # If you want to change or add directories, just edit the line you're 3 | # interested in. All local changes will be retained on the next run. 4 | # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped 5 | # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an 6 | # absolute path. No other format is supported. 7 | # 8 | XDG_DESKTOP_DIR="$HOME/desktop" 9 | XDG_DOWNLOAD_DIR="$HOME/downloads" 10 | XDG_TEMPLATES_DIR="$HOME/templates" 11 | XDG_PUBLICSHARE_DIR="$HOME/public" 12 | XDG_DOCUMENTS_DIR="$HOME/documents" 13 | XDG_MUSIC_DIR="$HOME/music" 14 | XDG_PICTURES_DIR="$HOME/pictures" 15 | XDG_VIDEOS_DIR="$HOME/videos" 16 | -------------------------------------------------------------------------------- /home/dot_config/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | # -----[Color Theme]----- 2 | include tokyo-night.conf 3 | 4 | # -----[Fonts]----- 5 | font_family FiraCode Nerd Font 6 | bold_font FiraCode Nerd Font 7 | italic_font JetBrains Mono Nerd Font 8 | bold_italic_font JetBrains Mono Nerd Font 9 | font_size 11.0 10 | 11 | # -----[Keybinds]----- 12 | map ctrl+backspace send_text all \x17 13 | 14 | # -----[Unbinds]----- 15 | map ctrl+shift+esc 16 | map ctrl+shift+q 17 | map ctrl+shift+n 18 | map ctrl+shift+enter 19 | 20 | # -----[Other Settings]----- 21 | enable_audio_bell no 22 | window_padding_width 10 23 | tab_bar_style powerline 24 | 25 | # -----[Vim Slime]----- 26 | allow_remote_control yes 27 | listen_on unix:/tmp/mykitty 28 | 29 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/vimtex.lua.tmpl: -------------------------------------------------------------------------------- 1 | return { 2 | "lervag/vimtex", 3 | ft = { "tex" }, 4 | init = function() 5 | vim.g.tex_flavor = "latex" 6 | vim.g.vimtex_quickfix_mode = 0 7 | vim.g.vimtex_view_method = "zathura" 8 | vim.opt.conceallevel = 1 9 | vim.g.tex_conceal = "abdmg" 10 | vim.g.vimtex_compiler_latexmk = { 11 | {{ if eq .fullname "Hudson Liu"}} 12 | out_dir = "/home/j/documents/notes/latex_build/", 13 | {{ end }} 14 | options = { -- deletes default dictionary 15 | "--shell-escape", 16 | "-verbose", 17 | "-file-line-error", 18 | "-synctex=1", 19 | "-interaction=nonstopmode", 20 | "-f", 21 | }, 22 | } 23 | vim.g.vimtex_compiler_latexmk_engines = { 24 | _ = "-xelatex", 25 | } 26 | end, 27 | } 28 | -------------------------------------------------------------------------------- /extras/archinstall.json: -------------------------------------------------------------------------------- 1 | { 2 | "archinstall-language": "English", 3 | "audio_config": { 4 | "audio": "pipewire" 5 | }, 6 | "bootloader": "Systemd-boot", 7 | "kernels": [ 8 | "linux" 9 | ], 10 | "locale_config": { 11 | "kb_layout": "us", 12 | "sys_enc": "UTF-8", 13 | "sys_lang": "en_US.UTF-8" 14 | }, 15 | "network_config": { 16 | "type": "nm" 17 | }, 18 | "ntp": true, 19 | "profile_config": { 20 | "gfx_driver": "All open-source", 21 | "greeter": "lightdm-gtk-greeter", 22 | "profile": { 23 | "custom_settings": { 24 | "Bspwm": {} 25 | }, 26 | "details": [ 27 | "Bspwm" 28 | ], 29 | "main": "Desktop" 30 | } 31 | }, 32 | "swap": true, 33 | "timezone": "UTC", 34 | "version": null 35 | } 36 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_config/lazy.lua: -------------------------------------------------------------------------------- 1 | -- Bootstrap Lazy.nvim 2 | local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" 3 | if not (vim.uv or vim.loop).fs_stat(lazypath) then 4 | local lazyrepo = "https://github.com/folke/lazy.nvim.git" 5 | local out = vim.fn.system { "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath } 6 | if vim.v.shell_error ~= 0 then 7 | vim.api.nvim_echo({ 8 | { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, 9 | { out, "WarningMsg" }, 10 | { "\nPress any key to exit..." }, 11 | }, true, {}) 12 | vim.fn.getchar() 13 | os.exit(1) 14 | end 15 | end 16 | vim.opt.rtp:prepend(lazypath) 17 | 18 | -- Load Plugins 19 | require("lazy").setup { 20 | spec = { 21 | { import = "plugins" }, 22 | }, 23 | install = { colorscheme = { "tokyonight" } }, 24 | checker = { enabled = false }, -- Never Auto-Update 25 | } 26 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/keymaps.lua: -------------------------------------------------------------------------------- 1 | local map = vim.keymap.set 2 | 3 | -- Nvim-Tree Toggle 4 | map("n", "e", "NvimTreeToggle") 5 | 6 | -- Aerial 7 | map("n", "a", "AerialToggle! float") 8 | 9 | -- VimTeX 10 | map("n", "co", "VimtexCompile") 11 | map("n", "cv", "VimtexView") 12 | map("n", "cq", "VimtexStop") 13 | 14 | -- Telescope 15 | local builtin = require "telescope.builtin" 16 | map("n", "ff", builtin.find_files, { desc = "Telescope Find Files" }) 17 | map("n", "fg", builtin.live_grep, { desc = "Telescope Live Grep" }) 18 | map("n", "fb", builtin.buffers, { desc = "Telescope Buffers" }) 19 | map("n", "fh", builtin.help_tags, { desc = "Telescope Help Tags" }) 20 | 21 | -- Bufferline 22 | map("n", "", ":BufferLineCycleNext") 23 | map("n", "", ":BufferLineCyclePrev") 24 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/blink-cmp.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "saghen/blink.cmp", 3 | version = "1.*", 4 | opts = { 5 | -- C-space: Open menu or open docs if already open 6 | -- C-n/C-p or Up/Down: Select next/previous item 7 | -- C-e: Hide menu 8 | -- C-k: Toggle signature help (if signature.enabled = true) 9 | keymap = { preset = "super-tab" }, 10 | 11 | appearance = { 12 | nerd_font_variant = "mono", 13 | }, 14 | completion = { 15 | documentation = { auto_show = true, auto_show_delay_ms = 0 }, 16 | ghost_text = { enabled = true }, 17 | keyword = { range = "full" }, 18 | }, 19 | sources = { 20 | default = { "lazydev", "lsp", "path", "snippets" }, 21 | providers = { 22 | lazydev = { 23 | name = "LazyDev", 24 | module = "lazydev.integrations.blink", 25 | score_offset = 100, 26 | }, 27 | }, 28 | }, 29 | fuzzy = { implementation = "rust" }, 30 | }, 31 | opts_extend = { "sources.default" }, 32 | } 33 | -------------------------------------------------------------------------------- /docs/chezmoi-demo.tape: -------------------------------------------------------------------------------- 1 | # A short tape (using charm_ "VHS") demo-ing the Chezmoi install process. 2 | Output Chezmoi-Demo.gif 3 | 4 | Set FontSize 40 5 | Set Width 2000 6 | Set Height 1000 7 | Set Padding 40 8 | Set Theme "tokyonight" 9 | 10 | # Initialize Chezmoi 11 | Type "chezmoi init" 12 | Sleep 500ms 13 | Enter 14 | Sleep 1500ms 15 | 16 | # Name 17 | Type "John Smith" 18 | Sleep 500ms 19 | Enter 20 | Sleep 1500ms 21 | 22 | # Email 23 | Type "johnsmith@example.com" 24 | Sleep 500ms 25 | Enter 26 | Sleep 1500ms 27 | 28 | # Primary Monitor 29 | Type "DP-1" 30 | Sleep 500ms 31 | Enter 32 | Sleep 1500ms 33 | 34 | # Secondary Monitor 35 | Type "DP-2" 36 | Sleep 500ms 37 | Enter 38 | Sleep 1500ms 39 | 40 | # Backlight 41 | Type "intel_backlight" 42 | Sleep 500ms 43 | Enter 44 | Sleep 1500ms 45 | 46 | # Battery 47 | Type "BAT0" 48 | Sleep 500ms 49 | Enter 50 | Sleep 1500ms 51 | 52 | # Adapter 53 | Type "AC" 54 | Sleep 500ms 55 | Enter 56 | Sleep 1500ms 57 | 58 | # Show Config 59 | Type "vim ~/.config/chezmoi/chezmoi.toml" 60 | Sleep 500ms 61 | Enter 62 | Sleep 4s 63 | 64 | -------------------------------------------------------------------------------- /home/dot_config/kitty/tokyo-night.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | 3 | ## name: Tokyo Night Moon 4 | ## license: MIT 5 | ## author: Folke Lemaitre 6 | ## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_moon.conf 7 | 8 | 9 | background #222436 10 | foreground #c8d3f5 11 | selection_background #2d3f76 12 | selection_foreground #c8d3f5 13 | url_color #4fd6be 14 | cursor #c8d3f5 15 | cursor_text_color #222436 16 | 17 | # Tabs 18 | active_tab_background #82aaff 19 | active_tab_foreground #1e2030 20 | inactive_tab_background #2f334d 21 | inactive_tab_foreground #545c7e 22 | #tab_bar_background #1b1d2b 23 | 24 | # Windows 25 | active_border_color #82aaff 26 | inactive_border_color #2f334d 27 | 28 | # normal 29 | color0 #1b1d2b 30 | color1 #ff757f 31 | color2 #c3e88d 32 | color3 #ffc777 33 | color4 #82aaff 34 | color5 #c099ff 35 | color6 #86e1fc 36 | color7 #828bb8 37 | 38 | # bright 39 | color8 #444a73 40 | color9 #ff757f 41 | color10 #c3e88d 42 | color11 #ffc777 43 | color12 #82aaff 44 | color13 #c099ff 45 | color14 #86e1fc 46 | color15 #c8d3f5 47 | 48 | # extended colors 49 | color16 #ff966c 50 | color17 #c53b53 51 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Hudson Liu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /home/dot_config/zathura/zathurarc: -------------------------------------------------------------------------------- 1 | # ------[Recolor Keybind]------ 2 | set recolor true 3 | map recolor 4 | 5 | # ------[Smooth Scrolling]------ 6 | map j feedkeys "" 7 | map k feedkeys "" 8 | 9 | # ------[Color Theme, Tokyo Night]------ 10 | # Author: "CondensedMilk7" 11 | set default-bg "#1b1d2b" 12 | set default-fg "#ffffff" 13 | 14 | set statusbar-fg "#a9b1d6" 15 | set statusbar-bg "#24283b" 16 | 17 | set inputbar-bg "#1a1b26" 18 | set inputbar-fg "#73daca" 19 | 20 | set notification-bg "#1a1b26" 21 | set notification-fg "#73daca" 22 | 23 | set notification-error-bg "#1a1b26" 24 | set notification-error-fg "#f7768e" 25 | 26 | set notification-warning-bg "#1a1b26" 27 | set notification-warning-fg "#f7768e" 28 | 29 | set highlight-color "#e0af68" 30 | set highlight-active-color "#9aa5ce" 31 | 32 | set completion-bg "#24283b" 33 | set completion-fg "#a9b1d6" 34 | 35 | set completion-highlight-fg "#9aa5ce" 36 | set completion-highlight-bg "24283b" 37 | 38 | set recolor-lightcolor "#222436" 39 | set recolor-darkcolor "#e9edfb" 40 | 41 | # dark mode true 42 | -------------------------------------------------------------------------------- /home/dot_config/zathura/zathurarc-tokyo-night: -------------------------------------------------------------------------------- 1 | # ------[Recolor Keybind]------ 2 | set recolor true 3 | map recolor 4 | 5 | # ------[Smooth Scrolling]------ 6 | map j feedkeys "" 7 | map k feedkeys "" 8 | 9 | # ------[Color Theme, Tokyo Night]------ 10 | # Author: "CondensedMilk7" 11 | set default-bg "#1b1d2b" 12 | set default-fg "#ffffff" 13 | 14 | set statusbar-fg "#a9b1d6" 15 | set statusbar-bg "#24283b" 16 | 17 | set inputbar-bg "#1a1b26" 18 | set inputbar-fg "#73daca" 19 | 20 | set notification-bg "#1a1b26" 21 | set notification-fg "#73daca" 22 | 23 | set notification-error-bg "#1a1b26" 24 | set notification-error-fg "#f7768e" 25 | 26 | set notification-warning-bg "#1a1b26" 27 | set notification-warning-fg "#f7768e" 28 | 29 | set highlight-color "#e0af68" 30 | set highlight-active-color "#9aa5ce" 31 | 32 | set completion-bg "#24283b" 33 | set completion-fg "#a9b1d6" 34 | 35 | set completion-highlight-fg "#9aa5ce" 36 | set completion-highlight-bg "24283b" 37 | 38 | set recolor-lightcolor "#222436" 39 | set recolor-darkcolor "#a9b1d6" 40 | 41 | # dark mode true 42 | -------------------------------------------------------------------------------- /home/dot_config/zathura/zathurarc-nord: -------------------------------------------------------------------------------- 1 | # ------[Recolor Keybind]------ 2 | set recolor true 3 | map recolor 4 | 5 | # ------[Smooth Scrolling]------ 6 | map j feedkeys "" 7 | map k feedkeys "" 8 | 9 | # ------[Color Theme, Base16 Nord]------ 10 | # Author: "arcticicestudio" 11 | set default-bg "#2E3440" 12 | set default-fg "#3B4252" 13 | 14 | set statusbar-fg "#D8DEE9" 15 | set statusbar-bg "#434C5E" 16 | 17 | set inputbar-bg "#2E3440" 18 | set inputbar-fg "#8FBCBB" 19 | 20 | set notification-bg "#2E3440" 21 | set notification-fg "#8FBCBB" 22 | 23 | set notification-error-bg "#2E3440" 24 | set notification-error-fg "#BF616A" 25 | 26 | set notification-warning-bg "#2E3440" 27 | set notification-warning-fg "#BF616A" 28 | 29 | set highlight-color "rgba(235, 203, 139, 0.5)" 30 | set highlight-active-color "rgba(129, 161, 193, 0.5)" 31 | 32 | set completion-bg "#3B4252" 33 | set completion-fg "#81A1C1" 34 | 35 | set completion-highlight-fg "#8FBCBB" 36 | set completion-highlight-bg "#81A1C1" 37 | 38 | set recolor-lightcolor "#2E3440" 39 | set recolor-darkcolor "#ECEFF4" 40 | 41 | # dark mode false 42 | -------------------------------------------------------------------------------- /home/dot_bashrc.tmpl: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Interactive Checker 3 | [[ $- != *i* ]] && return 4 | 5 | # ------[Aliases]------ 6 | alias ls='eza -l' # Better version of ls 7 | alias grep='grep --color=auto' # Prettier grep 8 | alias adam='setxkbmap -option caps:swapescape' # For normal keyboard use 9 | alias ramiel='setxkbmap -option' # For split ergomech usage 10 | alias nv="nvim" 11 | alias v='source ~/documents/envs/env_runner.sh' # Venv selector for Python 12 | alias n='dunstctl set-paused toggle && echo "Paused:" && dunstctl is-paused' # Toggle Notifications 13 | alias z="bash ~/.config/zathura/zathura-toggle-theme.sh" # Toggle color theme for Zathura 14 | alias tm="bash ~/.local/bin/tm.sh" 15 | alias cc="cd ~/.local/share/chezmoi/" 16 | alias cn="cd ~/documents/notes/" 17 | alias cb="cd ~/documents/bookshelf/" 18 | {{ if eq .fullname "Hudson Liu" }} 19 | alias cf="cd ~/documents/projects/cpp\ practice/" 20 | alias ml="~/matlab/bin/matlab -webui" 21 | {{ end }} 22 | 23 | # ------[Functions (Jobs)]------ 24 | # Run Job 25 | rj() { 26 | src="$1" 27 | bin="${src%.cpp}" 28 | clang++ -Wall -std=c++11 "$src" -o "tmp.out" && ./"tmp.out" 29 | } 30 | 31 | # ------[Prompt]------ 32 | PS1='\[\e[1m\]{{- index (splitList " " .fullname) 0 | lower -}}\[\e[0m\]-\[\e[1;94m\]\h\[\e[0m\] \[\e[1;32m\][\W]\[\e[0m\]: ' 33 | 34 | # ------[Change GOPATH]------ 35 | export GOPATH=$HOME/.go_workspace 36 | 37 | # ------[Show Fetch]----- 38 | catnap 39 | 40 | -------------------------------------------------------------------------------- /home/documents/envs/README.md: -------------------------------------------------------------------------------- 1 | # A simple python virtual environment manager 2 | The `env_list.txt` file contains the list of all environments. For instance, a potential layout would be the following: 3 | ```shell 4 | ├── Env_Random/ 5 | ├── Env_ML/ 6 | ├── Env_Manim/ 7 | │ 8 | ├── env_list.txt 9 | ├── env_runner.sh 10 | ├── env_script.py 11 | └── README.md 12 | ``` 13 | Note that, in the formatting of the env\_list file, the "Env_" prefix should be removed. Do not include whitespaces in the name of the virtual environment. 14 | 15 | Also, only the `env_runner.sh` file should ever be directly run. To select an environment, run the following command: 16 | ```bash 17 | source env_runner.sh 18 | ``` 19 | The only value that should be manually configured between devices is the value of `pypath` in the `env_runner.sh` file; just set it to where-ever the `env_script.py` program is located. For convenience, it is recommended to alias this command in your `.bashrc`. 20 | 21 | ## Creating New Environments 22 | To create a new environment, first use pyenv to create a new version of Python (as of 1/30/25, TensorFlow does not yet support Python 3.13): 23 | ```bash 24 | sudo pacman -S pyenv 25 | pyenv install 3.12.8 26 | pyenv local 3.12.8 27 | ``` 28 | Note that the remainder of these commands must be run in the same shell as the one where "`pyenv local 3.12.8`" was used. Then, create a virtual environment: 29 | ```bash 30 | pyenv exec python3 -m venv Env_[NAME OF ENVIRONMENT] 31 | ``` 32 | (The "Env_" isn't required, it's just standard for the program and also expected by the `env_runner.sh` script.) 33 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/exact_lua/exact_plugins/alpha.lua.tmpl: -------------------------------------------------------------------------------- 1 | return { 2 | "goolord/alpha-nvim", 3 | dependencies = { 4 | "nvim-tree/nvim-web-devicons", 5 | "nvim-lua/plenary.nvim", 6 | }, 7 | config = function() 8 | local theta = require "alpha.themes.theta" 9 | local dashboard = require "alpha.themes.dashboard" 10 | theta.file_icons.provider = "devicons" 11 | table.remove(theta.buttons.val, 6) -- Remove Broken Config Button 12 | table.remove(theta.buttons.val, 3) -- Remove New-File Button 13 | -- Add Shortcut to Chezmoi Configuration File 14 | table.insert( 15 | theta.buttons.val, 16 | dashboard.button("c", " Configuration", "cd ~/.local/share/chezmoi/ edit ./README.md") 17 | ) 18 | {{ if eq .fullname "Hudson Liu" }} 19 | table.insert( 20 | theta.buttons.val, 21 | dashboard.button("e", "󱉟 Notes", "cd ~/documents/notes edit ./personal/t-*") 22 | ) 23 | {{ end }} 24 | theta.header.val = { 25 | " ", 26 | " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ", 27 | " ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ", 28 | " ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ", 29 | " ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ", 30 | " ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ", 31 | " ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ", 32 | " (Configuration by Hudson Liu) ", 33 | } 34 | require("alpha").setup(theta.config) 35 | end, 36 | } 37 | -------------------------------------------------------------------------------- /home/dot_local/bin/executable_desk.sh.tmpl: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | # -----[Helper Functions]----- 5 | # Usage: switch_workspace 6 | switch_workspace() { 7 | xdotool key "Super_L+$1" 8 | sleep 0.2 9 | } 10 | # Usage: launch_background "" 11 | launch_background() { 12 | eval "$1" & 13 | sleep "$2" 14 | } 15 | 16 | # Lower Volume 17 | pactl set-sink-volume 0 0% 18 | sleep 1 19 | 20 | # -----[Workspace Alpha]----- 21 | switch_workspace 1 22 | 23 | launch_background "google-chrome-stable --profile-directory='Default'" 3 24 | 25 | # -----[Workspace Beta]----- 26 | switch_workspace 2 27 | 28 | launch_background "google-chrome-stable --profile-directory='Profile 15'" 3 29 | 30 | # -----[Workspace Epsilon]----- 31 | # Check for existance of To-Do file 32 | switch_workspace 5 33 | 34 | launch_background "kitty" 0.3 35 | xdotool key "Super_L+Shift+space" 36 | sleep 0.3 37 | bspc node -v -290 0 38 | sleep 0.1 39 | bspc node -v 0 230 40 | sleep 0.1 41 | bspc node -z left -250 0 42 | sleep 0.1 43 | bspc node -z top 0 -420 44 | sleep 0.2 45 | {{ if eq .fullname "Hudson Liu" }} 46 | xdotool type "nv ~/documents/notes/personal/t-*.md" 47 | {{ else }} 48 | xdotool type "nv" 49 | {{ end }} 50 | sleep 0.5 51 | xdotool key Return 52 | sleep 0.5 53 | 54 | launch_background "kitty" 0.3 55 | xdotool key "Super_L+Shift+space" 56 | sleep 0.2 57 | bspc node -v 290 0 58 | sleep 0.1 59 | bspc node -v 0 -200 60 | sleep 0.1 61 | bspc node -z top 0 -70 62 | sleep 0.1 63 | xdotool type "lowfi" 64 | sleep 0.1 65 | xdotool key Return 66 | sleep 0.2 67 | 68 | launch_background "thunar" 1 69 | xdotool key "Super_L+Shift+space" 70 | sleep 0.2 71 | bspc node -v 460 0 72 | sleep 0.1 73 | bspc node -v 0 290 74 | sleep 0.1 75 | 76 | -------------------------------------------------------------------------------- /home/dot_config/bspwm/executable_bspwmrc.tmpl: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | # -----[Autostart Applications]----- 4 | pgrep -x sxhkd > /dev/null || sxhkd & 5 | picom & # Compositor 6 | flashfocus & # Shows active windows 7 | /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & # Manages GUI authenatication 8 | bash ~/.config/polybar/launch.sh & # Status Bar 9 | xss-lock --transfer-sleep-lock -- betterlockscreen -l blur & # Locks Laptop 10 | xautolock -time 5 -locker "systemctl suspend" -detectsleep & # Auto-sleep (Inactivity) 11 | fcitx5 & 12 | {{ if eq .fullname "Hudson Liu" }} 13 | # -----[Xinput Configuration]----- 14 | DEVICE_NAME="Apple Inc. Magic Trackpad" 15 | xinput --set-prop "$DEVICE_NAME" "libinput Accel Speed" -0.15 16 | xinput --set-prop "$DEVICE_NAME" "libinput Accel Profile Enabled" 1, 0, 0 17 | {{ end }} 18 | # -----[Wallpaper]----- 19 | feh --bg-fill ~/pictures/wallpapers/"Tokyo Night Abstract.png"& 20 | 21 | # -----[BSPWM Configuration]----- 22 | bspc monitor -d α β γ δ ε ζ η 23 | bspc config border_width 3 24 | bspc config window_gap 20 25 | bspc config split_ratio 0.5 26 | bspc config borderless_monocle true 27 | bspc config gapless_monocle true 28 | 29 | # -----[Border Colors]----- 30 | COLOR="#414868" # Tokyo Night 31 | # COLOR="#A6ACCD" # Poimandres 32 | # COLOR="#2E3440" # Invisible Nord Border 33 | # COLOR="#3B4252" # Lighter Nord Border 34 | # COLOR="#5E81AC" # Bright Nord Border 35 | 36 | bspc config focused_border_color "$COLOR" 37 | bspc config active_border_color "$COLOR" 38 | bspc config normal_border_color "$COLOR" 39 | 40 | # -----[Window Rules]----- 41 | bspc rule -a zoom state=floating 42 | bspc rule -a feh state=floating rectangle=1000x500+0+0 center=true 43 | bspc rule -a Google-chrome rectangle=800x1000+0+0 center=true 44 | bspc rule -a Thunar rectangle=850x450+0+0 center=true 45 | bspc rule -a kitty rectangle=500x370+0+0 center=true 46 | bspc rule -a mpv state=floating center=true 47 | -------------------------------------------------------------------------------- /extras/tabliss-professional.json: -------------------------------------------------------------------------------- 1 | { 2 | "background": { 3 | "display": { 4 | "blur": 0, 5 | "luminosity": -0.2 6 | }, 7 | "id": "syXeex6YUD8i", 8 | "key": "background/colour" 9 | }, 10 | "data/Snu8qth4y7u6": { 11 | "latitude": 29.6911, 12 | "longitude": -95.2091, 13 | "name": "Pasadena", 14 | "showDetails": false, 15 | "units": "us" 16 | }, 17 | "data/lE3Fj3ZYwRQh": { 18 | "hour12": false, 19 | "mode": "analogue", 20 | "showDate": false, 21 | "showDayPeriod": true, 22 | "showMinutes": true, 23 | "showSeconds": true, 24 | "timeZone": null 25 | }, 26 | "data/mQXQ6Xmk5iJX": { 27 | "input": "@import url('https://fonts.googleapis.com/css2?family=Tiny5&display=swap');" 28 | }, 29 | "data/syXeex6YUD8i": { 30 | "colour": "#222436" 31 | }, 32 | "data/wg2G9YTIO2u8": { 33 | "messages": [ 34 | "WHATEVER HAPPENS, HAPPENS... :)" 35 | ] 36 | }, 37 | "widget/Snu8qth4y7u6": { 38 | "display": { 39 | "fontFamily": "Tiny5", 40 | "position": "middleCentre" 41 | }, 42 | "id": "Snu8qth4y7u6", 43 | "key": "widget/weather", 44 | "order": 5 45 | }, 46 | "widget/default-greeting": null, 47 | "widget/default-time": null, 48 | "widget/lE3Fj3ZYwRQh": { 49 | "display": { 50 | "position": "middleCentre" 51 | }, 52 | "id": "lE3Fj3ZYwRQh", 53 | "key": "widget/time", 54 | "order": 3 55 | }, 56 | "widget/mQXQ6Xmk5iJX": { 57 | "display": { 58 | "position": "middleCentre" 59 | }, 60 | "id": "mQXQ6Xmk5iJX", 61 | "key": "widget/css", 62 | "order": 2 63 | }, 64 | "widget/wg2G9YTIO2u8": { 65 | "display": { 66 | "fontFamily": "Tiny5", 67 | "fontWeight": 400, 68 | "position": "middleCentre" 69 | }, 70 | "id": "wg2G9YTIO2u8", 71 | "key": "widget/message", 72 | "order": 4 73 | }, 74 | "focus": false, 75 | "locale": "en", 76 | "timeZone": null, 77 | "version": 3 78 | } 79 | -------------------------------------------------------------------------------- /extras/tabliss-caltech.json: -------------------------------------------------------------------------------- 1 | { 2 | "background": { 3 | "display": { 4 | "blur": 0, 5 | "luminosity": -0.2 6 | }, 7 | "id": "Eq1hvA9JHYN2", 8 | "key": "background/colour" 9 | }, 10 | "data/BjfVCTD-_ORC": { 11 | "messages": [ 12 | " 加州理工学院" 13 | ] 14 | }, 15 | "data/Eq1hvA9JHYN2": { 16 | "colour": "#222436" 17 | }, 18 | "data/hryi5fJ0tfpv": { 19 | "messages": [ 20 | "THE TRUTH SHALL MAKE YOU FREE" 21 | ] 22 | }, 23 | "data/s38guQMZBWgF": { 24 | "input": "@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+TC:wght@200..900&display=swap');" 25 | }, 26 | "data/z_K6nIXNqnNi": { 27 | "messages": [ 28 | "劉瀚辰 " 29 | ] 30 | }, 31 | "widget/3LUvw6k6BVk5": null, 32 | "widget/BjfVCTD-_ORC": { 33 | "display": { 34 | "fontFamily": "Noto Serif TC", 35 | "position": "middleCentre" 36 | }, 37 | "id": "BjfVCTD-_ORC", 38 | "key": "widget/message", 39 | "order": 2 40 | }, 41 | "widget/DL09pdfiTPja": null, 42 | "widget/default-greeting": null, 43 | "widget/default-time": null, 44 | "widget/hryi5fJ0tfpv": { 45 | "display": { 46 | "fontFamily": "Noto Serif TC", 47 | "fontSize": 24, 48 | "position": "middleCentre" 49 | }, 50 | "id": "hryi5fJ0tfpv", 51 | "key": "widget/message", 52 | "order": 1 53 | }, 54 | "widget/s38guQMZBWgF": { 55 | "display": { 56 | "position": "middleCentre" 57 | }, 58 | "id": "s38guQMZBWgF", 59 | "key": "widget/css", 60 | "order": 3 61 | }, 62 | "widget/z_K6nIXNqnNi": { 63 | "display": { 64 | "fontFamily": "Noto Serif TC", 65 | "fontWeight": 700, 66 | "position": "middleCentre" 67 | }, 68 | "id": "z_K6nIXNqnNi", 69 | "key": "widget/message", 70 | "order": 0 71 | }, 72 | "focus": false, 73 | "locale": "en", 74 | "timeZone": null, 75 | "version": 3 76 | } 77 | -------------------------------------------------------------------------------- /home/documents/envs/env_script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | """env_script.py: Simple TUI for selecting a Python virtual environment.""" 5 | 6 | __author__ = "Hudson Liu" 7 | __email__ = "hudsonliu0@gmail.com" 8 | 9 | import signal 10 | import sys 11 | 12 | from termcolor import colored 13 | 14 | # Clean exit 15 | EXIT_PRMPT = colored("\n\nExiting venv selector... ", "yellow") + ">_<" 16 | def signal_handler(*_): 17 | """Handles ctrl c input""" 18 | print(EXIT_PRMPT) 19 | sys.exit() 20 | signal.signal(signal.SIGINT, signal_handler) 21 | 22 | # Banner 23 | BANNER = colored(""" 24 | ███████╗███████╗██╗ ███████╗ ██████╗████████╗ ██╗ ██╗███████╗███╗ ██╗██╗ ██╗ 25 | ██╔════╝██╔════╝██║ ██╔════╝██╔════╝╚══██╔══╝ ██║ ██║██╔════╝████╗ ██║██║ ██║ 26 | ███████╗█████╗ ██║ █████╗ ██║ ██║ ██║ ██║█████╗ ██╔██╗ ██║██║ ██║ 27 | ╚════██║██╔══╝ ██║ ██╔══╝ ██║ ██║ ╚██╗ ██╔╝██╔══╝ ██║╚██╗██║╚██╗ ██╔╝ 28 | ███████║███████╗███████╗███████╗╚██████╗ ██║ ╚████╔╝ ███████╗██║ ╚████║ ╚████╔╝ 29 | ╚══════╝╚══════╝╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═══╝ ╚═══╝ 30 | """, "blue") 31 | HEADER = HEADER = (colored("=========================[", attrs=["bold"]) + 32 | colored("An Environment Selector by Hudson Liu", "blue", attrs=["bold"]) + 33 | colored("]=========================", attrs=["bold"])) 34 | print(BANNER + HEADER) 35 | 36 | ENV_LIST = [l[:-1] for l in open("env_list.txt")] 37 | 38 | print("Found the following environments: \n" + 39 | "\n".join([f" {e + 1}. {c}" for e, c in enumerate(ENV_LIST)]) 40 | ) 41 | print("Enter the number associated with the desired environment.\n") 42 | 43 | while True: 44 | inp = input(colored("[TYPE HERE]> ", "green", attrs = ["bold"])) 45 | try: 46 | env = ENV_LIST[int(inp) - 1] 47 | with open("temp", "w") as f: 48 | f.write(env) 49 | break 50 | except: 51 | print(f"{colored("ERROR: ", "red", attrs=["bold"])}Your input, \"{inp}\", was not valid. Please try again.") 52 | 53 | 54 | -------------------------------------------------------------------------------- /extras/tabliss-personal.json: -------------------------------------------------------------------------------- 1 | { 2 | "background": { 3 | "display": { 4 | "blur": 0, 5 | "luminosity": -0.2 6 | }, 7 | "id": "VTunImD77jjS", 8 | "key": "background/colour" 9 | }, 10 | "data/5kgmuiL3MOG5": { 11 | "messages": [ 12 | "Il faut tenter de vivre!" 13 | ] 14 | }, 15 | "data/VTunImD77jjS": { 16 | "colour": "#222436" 17 | }, 18 | "data/fNV5f7TM0fPZ": { 19 | "hour12": true, 20 | "mode": "digital", 21 | "showDate": false, 22 | "showDayPeriod": true, 23 | "showMinutes": true, 24 | "showSeconds": false, 25 | "timeZone": null 26 | }, 27 | "data/juCDwv1VILcy": { 28 | "messages": [ 29 | "Le vent se lève!" 30 | ] 31 | }, 32 | "data/rZNbtMYgsl25": { 33 | "input": "@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@300..700&display=swap');" 34 | }, 35 | "widget/5NOSf-7fEd3e": null, 36 | "widget/5kgmuiL3MOG5": { 37 | "display": { 38 | "fontFamily": "Fira Code", 39 | "fontWeight": 400, 40 | "position": "middleCentre" 41 | }, 42 | "id": "5kgmuiL3MOG5", 43 | "key": "widget/message", 44 | "order": 3 45 | }, 46 | "widget/SHMeHN61BsjT": null, 47 | "widget/ZFo86-eTVLKv": null, 48 | "widget/ZvxH90oq4MHD": null, 49 | "widget/default-greeting": null, 50 | "widget/default-time": null, 51 | "widget/fNV5f7TM0fPZ": { 52 | "display": { 53 | "fontFamily": "Fira Code", 54 | "fontWeight": 400, 55 | "position": "middleCentre" 56 | }, 57 | "id": "fNV5f7TM0fPZ", 58 | "key": "widget/time", 59 | "order": 1 60 | }, 61 | "widget/juCDwv1VILcy": { 62 | "display": { 63 | "fontFamily": "Fira Code", 64 | "fontWeight": 400, 65 | "position": "middleCentre" 66 | }, 67 | "id": "juCDwv1VILcy", 68 | "key": "widget/message", 69 | "order": 0 70 | }, 71 | "widget/rZNbtMYgsl25": { 72 | "display": { 73 | "position": "middleCentre" 74 | }, 75 | "id": "rZNbtMYgsl25", 76 | "key": "widget/css", 77 | "order": 2 78 | }, 79 | "widget/uxjtMYHSmyjX": null, 80 | "focus": false, 81 | "locale": "en", 82 | "timeZone": null, 83 | "version": 3 84 | } 85 | -------------------------------------------------------------------------------- /home/.chezmoidata/packages.toml: -------------------------------------------------------------------------------- 1 | [packages.pacman] 2 | core_apps = [ 3 | "bspwm", "sxhkd", 4 | "picom", 5 | "thunar", "yazi", 6 | "kitty", 7 | "zathura", 8 | "neovim", 9 | "polybar", 10 | ] 11 | auxiliary_pkgs = [ 12 | # Thunar 13 | "tumbler", 14 | "thunar-archive-plugin", 15 | "thunar-media-tags-plugin", 16 | "thunar-volman", 17 | "ntfs-3g", 18 | # Zathura 19 | "zathura-pdf-mupdf", 20 | # Neovim 21 | "tree-sitter-cli", 22 | # GTK 23 | "lxappearance", 24 | "gtk-engine-murrine", 25 | ] 26 | system_service = [ 27 | "polkit-gnome", # Auth 28 | "fcitx5-im", "fcitx5-chinese-addons", "fcitx5-lua", # Pinyin 29 | "feh", # Wallpaper 30 | "dunst", # Notifs 31 | "maim", "xclip", # Screenshots 32 | "brightnessctl", # Brightness ctrl. w keyboard 33 | "pipewire", "pipewire-pulse", # Audio 34 | "rofi", # Application Selector 35 | ] 36 | fonts = [ 37 | "ttf-firacode-nerd", 38 | "ttf-jetbrains-mono-nerd", 39 | "noto-fonts-cjk", 40 | "noto-fonts-emoji", 41 | ] 42 | 43 | lsp = [ 44 | "pyright", 45 | "marksman", 46 | "texlab", 47 | "lua-language-server", 48 | "ccls", 49 | ] 50 | format = [ 51 | "stylua", 52 | "mdformat", 53 | ] 54 | texlive = [ 55 | "texlive-basic", 56 | "texlive-bibtexextra", 57 | "texlive-binextra", 58 | "texlive-context", 59 | "texlive-fontsextra", 60 | "texlive-fontsrecommended", 61 | "texlive-fontutils", 62 | "texlive-formatsextra", 63 | "texlive-games", 64 | "texlive-humanities", 65 | "texlive-latex", 66 | "texlive-latexextra", 67 | "texlive-latexrecommended", 68 | "texlive-luatex", 69 | "texlive-mathscience", 70 | "texlive-metapost", 71 | "texlive-music", 72 | "texlive-pictures", 73 | "texlive-plaingeneric", 74 | "texlive-pstricks", 75 | "texlive-publishers", 76 | "texlive-xetex", 77 | "perl-yaml-tiny", 78 | "perl-file-homedir", 79 | ] 80 | dev = [ 81 | "pyenv", 82 | "python-termcolor", 83 | "clang", 84 | ] 85 | 86 | [packages.aur] 87 | all = [ 88 | "flashfocus", 89 | "xautolock", 90 | "google-chrome", 91 | "catnap-git", 92 | "xcursor-breeze-neutral-git", 93 | "tokyonight-gtk-theme-git", 94 | "tumbler-extra-thumbnailers", 95 | "tex-fmt" 96 | ] 97 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- Set Global Variables 2 | vim.g.loaded_netrw = 1 3 | vim.g.loaded_netrwPlugin = 1 4 | vim.g.mapleader = " " 5 | vim.g.maplocalleader = "\\" 6 | vim.g.vimtex_syntax_enabled = 0 7 | vim.g.use_tmp_buffer = 1 8 | 9 | -- Set Options 10 | vim.opt.termguicolors = true 11 | vim.opt.relativenumber = true 12 | vim.opt.clipboard = "unnamedplus" 13 | vim.opt.laststatus = 3 14 | vim.opt.tabstop = 2 15 | vim.opt.shiftwidth = 2 16 | vim.opt.mousemoveevent = true 17 | vim.opt.undofile = true 18 | vim.opt.ignorecase = true 19 | vim.opt.expandtab = true 20 | if vim.g.neovide then 21 | vim.opt.guifont = "FiraCode_Nerd_Font:h8" 22 | end 23 | 24 | -- Loads Plugins 25 | require "config.lazy" 26 | 27 | -- Sets Color Theme 28 | vim.cmd [[colorscheme tokyonight]] 29 | 30 | -- Loads Mappings 31 | require "keymaps" 32 | 33 | -- LSPs 34 | vim.diagnostic.config { 35 | virtual_text = true, 36 | } 37 | vim.lsp.enable "pyright" -- Python 38 | vim.lsp.enable "marksman" -- Markdown 39 | vim.lsp.enable "texlab" -- LaTeX 40 | vim.lsp.enable "lua_ls" -- Lua 41 | vim.lsp.enable "ccls" -- C/C++ 42 | vim.lsp.enable "ts_ls" -- TypeScript 43 | 44 | -- ======[Autocommands]====== 45 | -- Applies Glyph-Pallette 46 | vim.api.nvim_create_autocmd({ "BufWinEnter", "BufReadPost", "BufNewFile" }, { command = "call glyph_palette#apply()" }) 47 | -- Changes to 4-Space Tab for Python (& Markdown) 48 | vim.api.nvim_create_autocmd("FileType", { 49 | pattern = { "py", "md" }, 50 | callback = function() 51 | vim.opt.tabstop = 4 52 | vim.opt.shiftwidth = 4 53 | end, 54 | }) 55 | -- Prevents Aerial from opening on unsupported window types 56 | vim.api.nvim_create_autocmd("FileType", { 57 | pattern = "*", 58 | callback = function(args) 59 | local ft = vim.bo[args.buf].filetype 60 | if ft == "NvimTree" or ft == "alpha" then 61 | vim.keymap.set("n", "a", function() 62 | vim.notify("Unsupported FileType for Aerial", vim.log.levels.WARN) 63 | end, { buffer = args.buf }) 64 | end 65 | end, 66 | }) 67 | -- Keeps Aerial centered on window resize 68 | vim.api.nvim_create_autocmd("VimResized", { 69 | callback = function() 70 | local aerial = require "aerial" 71 | if aerial.is_open() then 72 | aerial.close() 73 | vim.schedule(function() 74 | aerial.open { 75 | direction = "float", 76 | focus = false, 77 | } 78 | end) 79 | end 80 | end, 81 | }) 82 | -------------------------------------------------------------------------------- /home/dot_config/exact_nvim/lazy-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "aerial.nvim": { "branch": "master", "commit": "5e687b5a14004fa2dd9eccbee042b96869fe1557" }, 3 | "alpha-nvim": { "branch": "main", "commit": "2b3cbcdd980cae1e022409289245053f62fb50f6" }, 4 | "autolist.nvim": { "branch": "main", "commit": "5f70a5f99e96c8fe3069de042abd2a8ed2deb855" }, 5 | "barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" }, 6 | "blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" }, 7 | "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, 8 | "chezmoi.vim": { "branch": "main", "commit": "ca5f2ed602046d5662cb76d845c4b510aae0ce84" }, 9 | "conform.nvim": { "branch": "master", "commit": "fbcb4fa7f34bfea9be702ffff481a8e336ebf6ed" }, 10 | "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, 11 | "lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" }, 12 | "lazydev.nvim": { "branch": "main", "commit": "e28ce52fc7ff79fcb76f0e79ee6fb6182fca90b9" }, 13 | "lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" }, 14 | "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, 15 | "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" }, 16 | "nvim-navic": { "branch": "master", "commit": "099b4c8cdc3e9ea026ea6b2a0d315e2d28362242" }, 17 | "nvim-tree.lua": { "branch": "master", "commit": "64e2192f5250796aa4a7f33c6ad888515af50640" }, 18 | "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, 19 | "nvim-web-devicons": { "branch": "master", "commit": "b8221e42cf7287c4dcde81f232f58d7b947c210d" }, 20 | "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, 21 | "telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, 22 | "tokyonight.nvim": { "branch": "main", "commit": "e63c42a42b11cd6225f009dd949b9ee0fccc15ef" }, 23 | "vim-gitgutter": { "branch": "main", "commit": "488c0555e47e2aabe273c635f7dd233e985311a6" }, 24 | "vim-glyph-palette": { "branch": "master", "commit": "675f0ad64e2c4b823bffc1907d469deefaf6e3bd" }, 25 | "vim-lastplace": { "branch": "master", "commit": "e58cb0df716d3c88605ae49db5c4741db8b48aa9" }, 26 | "vim-tmux-navigator": { "branch": "master", "commit": "c45243dc1f32ac6bcf6068e5300f3b2b237e576a" }, 27 | "vimtex": { "branch": "master", "commit": "be9deac3a23eeb145ccf11dd09080795838496ce" }, 28 | "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" } 29 | } 30 | -------------------------------------------------------------------------------- /home/dot_config/picom/picom.conf: -------------------------------------------------------------------------------- 1 | # ------[Shadow Rules]------ 2 | shadow = true; 3 | shadow-radius = 25; 4 | shadow-opacity = 0.75; 5 | shadow-offset-x = -25; 6 | shadow-offset-y = -25; 7 | wintypes: { 8 | menu = { shadow = false; blur-background = false;} 9 | popup_menu = { shadow = false; blur-background = false;} 10 | dropdown_menu = { shadow = false; blur-background = false;} 11 | tooltip = { shadow = false; blur-background = false;} 12 | utility = { shadow = false; blur-background = false;} 13 | }; 14 | 15 | # ------[Rounded Corner Rules]------ 16 | corner-radius = 5; 17 | rounded-corners-exclude = [ "class_g = 'Rofi'", "class_g = 'Polybar'", "window_type = 'menu'"]; 18 | 19 | # ------[Graphics Settings]------ 20 | backend = "glx" # Faster than "xrender" 21 | dithered-preset = false; # Higher precision during rendering, reduces banding 22 | vsync = true; # Vsync for no screen shearing 23 | 24 | # ------[Animation Rules]------ 25 | animations = ( 26 | { 27 | triggers = ["close", "hide"]; 28 | opacity = { 29 | curve = "linear"; 30 | duration = 0.1; 31 | start = "window-raw-opacity-before"; 32 | end = 0; 33 | }; 34 | blur-opacity = "opacity"; 35 | shadow-opacity = "opacity"; 36 | }, 37 | { 38 | triggers = ["open", "show"]; 39 | opacity = { 40 | curve = "cubic-bezier(0,1,1,1)"; 41 | duration = 0.3; 42 | start = 0; 43 | end = "window-raw-opacity"; 44 | }; 45 | blur-opacity = "opacity"; 46 | shadow-opacity = "opacity"; 47 | offset-x = "(1 - scale-x) / 2 * window-width"; 48 | offset-y = "(1 - scale-y) / 2 * window-height"; 49 | scale-x = { 50 | curve = "cubic-bezier(0,1.3,1,1)"; 51 | duration = 0.3; 52 | start = 0.6; 53 | end = 1; 54 | }; 55 | scale-y = "scale-x"; 56 | shadow-scale-x = "scale-x"; 57 | shadow-scale-y = "scale-y"; 58 | shadow-offset-x = "offset-x"; 59 | shadow-offset-y = "offset-y"; 60 | }, 61 | { 62 | triggers = ["geometry"] 63 | scale-x = { 64 | curve = "cubic-bezier(0,0,0,1.28)"; 65 | duration = 0.22; 66 | start = "window-width-before / window-width"; 67 | end = 1; 68 | } 69 | scale-y = { 70 | curve = "cubic-bezier(0,0,0,1.28)"; 71 | duration = 0.22; 72 | start = "window-height-before / window-height"; 73 | end = 1; 74 | } 75 | offset-x = { 76 | curve = "cubic-bezier(0,0,0,1.28)"; 77 | duration = 0.22; 78 | start = "window-x-before - window-x"; 79 | end = 0; 80 | } 81 | offset-y = { 82 | curve = "cubic-bezier(0,0,0,1.28)"; 83 | duration = 0.22; 84 | start = "window-y-before - window-y"; 85 | end = 0; 86 | } 87 | 88 | shadow-scale-x = "scale-x"; 89 | shadow-scale-y = "scale-y"; 90 | shadow-offset-x = "offset-x"; 91 | shadow-offset-y = "offset-y"; 92 | } 93 | ) 94 | -------------------------------------------------------------------------------- /home/.chezmoi.toml.tmpl: -------------------------------------------------------------------------------- 1 | {{/*========[General Custom Data]========*/}} 2 | 3 | {{- writeToStdout "\n\x1b[34mFULLNAME (.custom_data.fullname):\x1b[0m Respond in the form of your first and last name, separated by a space (E.g.: \"John Smith\"). Do not include middle names; all responses must be of the form \"[First Name] [Last Name]\"\n" -}} 4 | {{- $fullname := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " "Hudson Liu" -}} 5 | 6 | {{ if eq $fullname "Hudson Liu" }} 7 | {{- writeToStdout "\n\x1b[32mIf you specify the full-name value of “Hudson Liu” (me), all template files will act as per my own configurations.\x1b[0m\n" -}} 8 | {{ end }} 9 | 10 | {{- writeToStdout "\n\x1b[34mEMAIL (.custom_data.email):\x1b[0m Enter your email. This will be used for Git.\n" -}} 11 | {{- $email := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " -}} 12 | 13 | {{- writeToStdout "\n\x1b[34mPRIMARY-MONITOR (.custom_data.primary_monitor):\x1b[0m Enter your primary monitor. This is the monitor that takes primary precedence---the one that will display first, if available. That's not the same as the monitor you use most often.\n" -}} 14 | {{- writeToStdout "" -}} 15 | {{- $primary_monitor := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " "DP-2" -}} 16 | 17 | {{- writeToStdout "\n\x1b[34mSECONDARY-MONITOR (.custom_data.secondary_monitor):\x1b[0m Enter your secondary monitor. This acts as your fallback and/or auxiliary monitor.\n" -}} 18 | {{- $secondary_monitor := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " "eDP-1" -}} 19 | 20 | 21 | {{/*========[Polybar]========*/}} 22 | 23 | {{- writeToStdout "\n\x1b[34mBACKLIGHT (.custom_data.polybar.backlight):\x1b[0m Enter the name of your backlight. If you’re not sure how to do this, run \"ls -1 /sys/class/backlight/\"; the first result should be your backlight’s name.\n" -}} 24 | {{- $backlight := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " "intel_backlight" -}} 25 | 26 | {{ if eq $backlight "intel_backlight" }} 27 | {{- writeToStdout "\n\x1b[32mYou entered \"intel_backlight\". Note that, for the Polybar module to work, you may have to run the following commands:\nsudo chmod 777 /sys/class/backlight/intel_backlight/brightness\nsudo chmod 777 /sys/class/backlight/intel_backlight/actual_brightness\x1b[0m\n" -}} 28 | {{ end }} 29 | 30 | {{- writeToStdout "\n\x1b[34mBATTERY (.custom_data.polybar.battery):\x1b[0m As with the backlight, enter the name of your battery. To find it, run \"ls -1 /sys/class/power_supply/\"\n" -}} 31 | {{- $battery := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " "BAT0" -}} 32 | 33 | {{- writeToStdout "\n\x1b[34mADAPTER (.custom_data.polybar.adapter):\x1b[0m Follow same as prior.\n" -}} 34 | {{- $adapter := promptString "\x1b[31m[TYPE HERE]>\x1b[0m " "AC" -}} 35 | 36 | 37 | {{/*========[TOML Template]========*/}} 38 | 39 | [diff] 40 | exclude = ["scripts"] 41 | [edit] 42 | command = "nvim" 43 | [data] 44 | fullname = {{ $fullname | quote }} 45 | email = {{ $email | quote }} 46 | primary_monitor = {{ $primary_monitor | quote }} 47 | secondary_monitor = {{ $secondary_monitor | quote }} 48 | [data.polybar] 49 | backlight = {{ $backlight | quote }} 50 | battery = {{ $battery | quote }} 51 | adapter = {{ $adapter | quote }} 52 | -------------------------------------------------------------------------------- /home/dot_config/sxhkd/sxhkdrc.tmpl: -------------------------------------------------------------------------------- 1 | # -----[Screenshot]----- 2 | super + s 3 | dunstify "Taking Screenshot (Normal)" \ 4 | && maim -s \ 5 | | tee "$HOME/pictures/screenshots/$(date +'%b %d, %r').png" \ 6 | | xclip -selection clipboard -t image/png 7 | {{ if eq .fullname "Hudson Liu" }} 8 | super + shift + s 9 | dunstify "Taking Screenshot (Notes)" \ 10 | && maim -s \ 11 | | tee "$HOME/documents/notes/images/$(date +'%b %d, %r').png" \ 12 | | xclip -selection clipboard -t image/png 13 | {{ end }} 14 | 15 | # -----[Custom Startup Script]----- 16 | super + shift + y 17 | bash ~/.local/bin/desk.sh 18 | 19 | # -----[Controls]----- 20 | XF86MonBrightness{Up,Down} 21 | brightnessctl s 9600{+,-} 22 | XF86AudioRaiseVolume 23 | pactl set-sink-volume 0 +5% 24 | XF86AudioLowerVolume 25 | pactl set-sink-volume 0 -5% 26 | XF86AudioMute 27 | pactl set-sink-mute 0 toggle 28 | 29 | # -----[Tabs (Tabbed)]----- 30 | # Add current window to tabbed window 31 | ctrl + alt + {Left,Down,Up,Right} 32 | tabc attach $(bspc query -N -n) {$(bspc query -N -n west),$(bspc query -N -n south),$(bspc query -N -n north),$(bspc query -N -n east)} 33 | # Create/remove from tabbed container 34 | super + z 35 | id=$(bspc query -N -n); \ 36 | [[ "$(tabc printclass $id)" == "tabbed" ]] \ 37 | && tabc detach $id \ 38 | || tabc create $id 39 | 40 | # -----[Launch Programs]----- 41 | # Launch terminal emulator 42 | super + Return 43 | kitty 44 | # Launch thunar's bookshelf 45 | super + q 46 | thunar 47 | # Launch program 48 | super + d 49 | rofi -show drun 50 | # Launch neovim 51 | super + shift + n 52 | betterlockscreen -l blur 53 | # Launch chrome 54 | super + a 55 | google-chrome-stable 56 | 57 | # -----[BSPWM Hotkeys]----- 58 | # Balances windows (equal size) 59 | super + shift + d 60 | bspc node @/ -B 61 | # Reload SXHKD's configuration 62 | super + Escape 63 | pkill -USR1 -x sxhkd 64 | # Quit/restart BSPWM 65 | super + shift + r 66 | bspc wm -r 67 | # Close & kill window 68 | super + shift + q 69 | bspc node -c 70 | # Toggle monocle layout 71 | super + m 72 | bspc desktop -l next 73 | # Send newest marked node to newest preselected node 74 | super + y 75 | bspc node newest.marked.local -n newest.!automatic.local 76 | # For flashfocus, flash the current window 77 | super + n 78 | flash_window 79 | # Toggle floating window 80 | super + shift + space 81 | if [ -z "$(bspc query -N -n focused.floating)" ]; then \ 82 | bspc node focused -t floating; \ 83 | else \ 84 | bspc node focused -t tiled; \ 85 | fi 86 | # Move floating window 87 | super + {Left,Down,Up,Right} 88 | bspc node -v {-20 0,0 20,0 -20,20 0} 89 | 90 | # -----[State/Flags]----- 91 | # Set window state 92 | super + {t,shift + t,f} 93 | bspc node -t {tiled,pseudo_tiled,fullscreen} 94 | # Set node flags 95 | super + ctrl + {m,y} 96 | bspc node -g {marked,sticky} 97 | 98 | # -----[Focus/Swap]----- 99 | # Focus/swap node in given direction 100 | super + {_,shift + }{h,j,k,l} 101 | bspc node -{f,s} {west,south,north,east} 102 | # Focus the next/previous window in the current desktop 103 | super + {_,shift + }c 104 | bspc node -f {next,prev}.local.!hidden.window 105 | # Focus adjacent desktop 106 | super + bracket{left,right} 107 | bspc desktop -f {prev,next}.local 108 | # Focus/send-to given desktop 109 | super + {_,shift + }{1-9,0} 110 | bspc {desktop -f,node -d} focused:^{1-9,10} 111 | 112 | # -----[Preselect]----- 113 | # Preselect direction 114 | super + ctrl + {h,j,k,l} 115 | bspc node -p {west,south,north,east} 116 | # Cancel preselection 117 | super + ctrl + space 118 | bspc node -p cancel 119 | 120 | # -----[Resize]----- 121 | # Expand window size 122 | super + alt + {h,j,k,l} 123 | bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} 124 | # Contract window size 125 | super + alt + shift + {h,j,k,l} 126 | bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0} 127 | 128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |
4 | Arch Dotfiles (w/ Chezmoi) 5 |
6 | Commit Frequency 7 | License 8 |

9 | 10 | Dotfiles for a fairly minimal "Tokyo Night"-themed Arch Linux setup. This repo is only updated on a semi-regular basis, and it's entirely tailored to my personal workflow; everything _should_ work out-of-the-box, but I can't guarantee full reproducibility across all machines (though feel free to create a new [issue](https://github.com/hudson-liu/dotfiles/issues) if something is broken). 11 | 12 | Also, fair warning: I strongly recommend only testing these dotfiles on a **fresh, blank install of Arch Linux**. These dotfiles _do not work_ unless you specifically use BSPWM, Pipewire/Pulseaudio, and a number of other applications—Chezmoi should auto-install these, but if you already have an existing DE/WM set up, then these dots likely won't work as intended. 13 | 14 | 15 | ## Installation 16 | The following assumptions are made: 17 | - Dotfiles are placed in ~/.config/ 18 | - Home directory is stored in $HOME variable 19 | - [yay](https://github.com/Jguer/yay?tab=readme-ov-file#installation) is installed 20 | 21 | > [!IMPORTANT] 22 | > Check through _all files_ in this repo before running `chezmoi init` (or, at the minimum, any directory tagged with `exact_`). Certain directories **may be deleted without backup**, so be careful and don't run anything you don't understand... unless you’re okay with potentially breaking your system or deleting important files (ergo: [running this on a VM](https://wiki.archlinux.org/title/VirtualBox/Install_Arch_Linux_as_a_guest), which I highly recommend). 23 | 24 | For a quick fresh install, I suggest using the archinstall script—the exported JSON configuration is at [./extras/archinstall.json](https://github.com/hudson-liu/dotfiles/blob/main/extras/archinstall.json), you can use it with: 25 | ```bash 26 | curl -o tmp.json 'https://raw.githubusercontent.com/hudson-liu/dotfiles/main/extras/archinstall.json' 27 | archinstall --config tmp.json 28 | ``` 29 | Once you've finished installing Arch, reboot and **enter any empty TTY session** (we can't use BSPWM yet since SXHKD keybindings haven't been set). To use the dots, login and clone the dotfiles repo: 30 | ```bash 31 | sudo pacman -S chezmoi git 32 | git clone https://github.com/hudson-liu/dotfiles.git ~/.local/share/chezmoi/ 33 | chezmoi init 34 | chezmoi apply 35 | ``` 36 | (I don't recommend using `chezmoi init --apply hudson-liu`, as errors can potentially occur during cloning and initialization. Separate commands help with identifying which step went wrong.) 37 | 38 | After the second command, Chezmoi will prompt various questions from `.chezmoi.toml.tmpl`. The setup is complete upon reboot. The generated `~/.config/chezmoi/chezmoi.toml` can be manually edited with any text editor. Updates to the package list in `.chezmoidata/packages.toml` will take effect upon re-running `chezmoi apply` 39 | 40 | ## Screenshots + Demo 41 | 42 | | Empty Layout | Floating Layout | Tiled Layout | 43 | |--------------|-----------------|--------------| 44 | | ![Empty](./docs/empty-layout.png) | ![Floating](./docs/floating-layout.png) | ![Tiled](./docs/tiling-layout.png) | 45 | 46 |
47 |

Initial Chezmoi Installation/Setup

48 | initial chezmoi installation setup 49 |
50 | 51 |
52 |

Python Virtual Environment Selector

53 | selecting a virtual environment 54 |
55 | 56 | ## Inspiration 57 | - [Manas140's Dotfiles](https://github.com/Manas140/dotfiles) 58 | - [Amogh's Dotfiles](https://github.com/amogh-w/dotfiles) 59 | - [Tudurom's Dotfiles](https://github.com/tudurom/dotfiles) 60 | -------------------------------------------------------------------------------- /home/dot_config/polybar/config.ini.tmpl: -------------------------------------------------------------------------------- 1 | [colors] 2 | background = #222436 3 | background-alt = #222436 4 | foreground = #c8d3f5 5 | primary = #82aaff 6 | secondary = #c3e88d 7 | alert = #FF757F 8 | disabled = #444a73 9 | 10 | [bar/TokyoNight] 11 | monitor = {{ .primary_monitor }} 12 | monitor-fallback = {{ .secondary_monitor }} 13 | width = 98% 14 | offset-x = 20 15 | offset-y = 15 16 | height = 24pt 17 | margin-top = 5 18 | margin-bottom = 5 19 | 20 | background = ${colors.background} 21 | foreground = ${colors.foreground} 22 | 23 | line-size = 3pt 24 | 25 | border-size = 2.5pt 26 | border-color = #414868 27 | 28 | padding-left = 0 29 | padding-right = 1 30 | module-margin = 1 31 | 32 | separator = | 33 | separator-foreground = ${colors.disabled} 34 | 35 | font-0 = "FiraCode Nerd Font;2" 36 | 37 | modules-left = xworkspaces xwindow 38 | modules-right = backlight pulseaudio battery memory wlan date 39 | 40 | cursor-click = pointer 41 | cursor-scroll = ns-resize 42 | 43 | enable-ipc = true 44 | 45 | wm-restack = bspwm 46 | 47 | [module/systray] 48 | type = internal/tray 49 | 50 | format-margin = 8pt 51 | tray-spacing = 16pt 52 | 53 | [module/xworkspaces] 54 | type = internal/xworkspaces 55 | 56 | label-active = %name% 57 | label-active-background = ${colors.background-alt} 58 | label-active-underline= ${colors.primary} 59 | label-active-padding = 1 60 | 61 | label-occupied = %name% 62 | label-occupied-padding = 1 63 | 64 | label-urgent = %name% 65 | label-urgent-background = ${colors.alert} 66 | label-urgent-padding = 1 67 | 68 | label-empty = %name% 69 | label-empty-foreground = ${colors.disabled} 70 | label-empty-padding = 1 71 | 72 | [module/xwindow] 73 | type = internal/xwindow 74 | label = %title:0:42:...% 75 | 76 | [module/backlight] 77 | type = internal/backlight 78 | card = {{ .polybar.backlight }} 79 | use-actual-brightness = true 80 | poll-interval = 0 81 | format-prefix = "LIGHT " 82 | format-prefix-foreground = ${colors.primary} 83 | enable-scroll = true 84 | scroll-interval = 10 85 | 86 | [module/battery] 87 | type = internal/battery 88 | full-at = 99 89 | low-at = 5 90 | 91 | ; Use the following command to list batteries and adapters: 92 | ; ls -1 /sys/class/power_supply/ 93 | battery = {{ .polybar.battery }} 94 | adapter = {{ .polybar.adapter }} 95 | 96 | format-charging-prefix = "BAT " 97 | format-discharging-prefix = "BAT " 98 | 99 | format-charging-prefix-foreground = ${colors.secondary} 100 | format-discharging-prefix-foreground = ${colors.primary} 101 | 102 | 103 | ; If an inotify event haven't been reported in this many 104 | ; seconds, manually poll for new values. 105 | ; 106 | ; Needed as a fallback for systems that don't report events 107 | ; on sysfs/procfs. 108 | ; 109 | ; Disable polling by setting the interval to 0. 110 | ; 111 | ; Default: 5 112 | poll-interval = 5 113 | 114 | [module/pulseaudio] 115 | type = internal/pulseaudio 116 | 117 | format-volume-prefix = "VOL " 118 | format-volume-prefix-foreground = ${colors.primary} 119 | format-volume = 120 | 121 | label-volume = %percentage%% 122 | 123 | label-muted = muted 124 | label-muted-foreground = ${colors.disabled} 125 | 126 | [module/xkeyboard] 127 | type = internal/xkeyboard 128 | blacklist-0 = num lock 129 | 130 | label-layout = %layout% 131 | label-layout-foreground = ${colors.primary} 132 | 133 | label-indicator-padding = 2 134 | label-indicator-margin = 1 135 | label-indicator-foreground = ${colors.background} 136 | label-indicator-background = ${colors.secondary} 137 | 138 | [module/memory] 139 | type = internal/memory 140 | interval = 2 141 | format-prefix = "RAM " 142 | format-prefix-foreground = ${colors.primary} 143 | label = %percentage_used:2%% 144 | 145 | [module/cpu] 146 | type = internal/cpu 147 | interval = 2 148 | format-prefix = "CPU " 149 | format-prefix-foreground = ${colors.primary} 150 | label = %percentage:2%% 151 | 152 | [network-base] 153 | type = internal/network 154 | interval = 5 155 | format-connected = 156 | format-disconnected = 157 | label-disconnected = %{F#c3e88d}%ifname%%{F#2f334d} disconnected 158 | 159 | [module/wlan] 160 | inherit = network-base 161 | interface-type = wireless 162 | label-connected = %{F#c3e88d}%ifname%%{F-} %essid% 163 | 164 | [module/date] 165 | type = internal/date 166 | interval = 1 167 | 168 | date = %b. %d — %I:%M %p 169 | date-alt = 170 | 171 | label = %date% 172 | label-foreground = ${colors.primary} 173 | 174 | [settings] 175 | screenchange-reload = true 176 | pseudo-transparency = true 177 | 178 | -------------------------------------------------------------------------------- /home/dot_config/rofi/tokyo-night.rasi: -------------------------------------------------------------------------------- 1 | /* 2 | * ROFI Color theme 3 | * User: Hudson-Liu 4 | * Adapted from leofa's "Arc-Dark.rasi" 5 | */ 6 | 7 | * { 8 | foreground: #e6e7edff; 9 | selected-normal-foreground: @foreground; 10 | normal-foreground: @foreground; 11 | alternate-normal-foreground: @foreground; 12 | background: #1a1b26ff; 13 | normal-background: @background; 14 | active-background: @background; 15 | urgent-background: @background; 16 | alternate-normal-background: #24283bff; 17 | alternate-urgent-background: @alternate-normal-background; 18 | alternate-active-background: @alternate-normal-background; 19 | selected-normal-background: #565f89ff; 20 | red: #f7768eff; 21 | urgent-foreground: @red; 22 | alternate-urgent-foreground: @red; 23 | selected-urgent-background: @red; 24 | selected-urgent-foreground: @background; 25 | blue: #7dcfffff; 26 | active-foreground: @blue; 27 | alternate-active-foreground: @blue; 28 | selected-active-background: @blue; 29 | selected-active-foreground: @background; 30 | border-color: #414868ff; 31 | spacing: 2; 32 | separatorcolor: #41486880; 33 | background-color: #00000000; 34 | } 35 | window { 36 | background-color: @background; 37 | border: 1; 38 | padding: 5; 39 | } 40 | mainbox { 41 | border: 0; 42 | padding: 0; 43 | } 44 | message { 45 | border: 2px 0px 0px ; 46 | border-color: @separatorcolor; 47 | padding: 1px ; 48 | } 49 | textbox { 50 | text-color: @foreground; 51 | } 52 | listview { 53 | fixed-height: 0; 54 | border: 2px 0px 0px ; 55 | border-color: @separatorcolor; 56 | spacing: 2px ; 57 | scrollbar: true; 58 | padding: 2px 0px 0px ; 59 | } 60 | element { 61 | border: 0; 62 | padding: 1px ; 63 | } 64 | element-text { 65 | background-color: inherit; 66 | text-color: inherit; 67 | } 68 | element.normal.normal { 69 | background-color: @normal-background; 70 | text-color: @normal-foreground; 71 | } 72 | element.normal.urgent { 73 | background-color: @urgent-background; 74 | text-color: @urgent-foreground; 75 | } 76 | element.normal.active { 77 | background-color: @active-background; 78 | text-color: @active-foreground; 79 | } 80 | element.selected.normal { 81 | background-color: @selected-normal-background; 82 | text-color: @selected-normal-foreground; 83 | } 84 | element.selected.urgent { 85 | background-color: @selected-urgent-background; 86 | text-color: @selected-urgent-foreground; 87 | } 88 | element.selected.active { 89 | background-color: @selected-active-background; 90 | text-color: @selected-active-foreground; 91 | } 92 | element.alternate.normal { 93 | background-color: @alternate-normal-background; 94 | text-color: @alternate-normal-foreground; 95 | } 96 | element.alternate.urgent { 97 | background-color: @alternate-urgent-background; 98 | text-color: @alternate-urgent-foreground; 99 | } 100 | element.alternate.active { 101 | background-color: @alternate-active-background; 102 | text-color: @alternate-active-foreground; 103 | } 104 | scrollbar { 105 | width: 4px ; 106 | border: 0; 107 | handle-color: @normal-foreground; 108 | handle-width: 8px ; 109 | padding: 0; 110 | } 111 | mode-switcher { 112 | border: 2px 0px 0px ; 113 | border-color: @separatorcolor; 114 | } 115 | button { 116 | spacing: 0; 117 | text-color: @normal-foreground; 118 | } 119 | button.selected { 120 | background-color: @selected-normal-background; 121 | text-color: @selected-normal-foreground; 122 | } 123 | inputbar { 124 | spacing: 0; 125 | text-color: @normal-foreground; 126 | padding: 1px ; 127 | } 128 | case-indicator { 129 | spacing: 0; 130 | text-color: @normal-foreground; 131 | } 132 | entry { 133 | spacing: 0; 134 | text-color: @normal-foreground; 135 | } 136 | prompt { 137 | spacing: 0; 138 | text-color: @normal-foreground; 139 | } 140 | inputbar { 141 | children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; 142 | } 143 | textbox-prompt-colon { 144 | expand: false; 145 | str: ":"; 146 | margin: 0px 0.3em 0em 0em ; 147 | text-color: @normal-foreground; 148 | } 149 | 150 | --------------------------------------------------------------------------------