├── .dotter ├── .gitignore ├── adelie.toml ├── dingspad.toml ├── emperor.toml ├── global.toml ├── helpers │ ├── hex_remove_hash.rhai │ ├── hex_to_xterm.rhai │ └── strings.rhai ├── strawberrypi.toml └── tracer.toml ├── .envrc ├── .github └── workflows │ └── tests.yml ├── .gitignore ├── .sops.yaml ├── LICENSE ├── Makefile ├── README.md ├── checkhealth.sh ├── docs ├── amazing_banner.svg ├── arch-linux-installation-guide.md ├── encrypt-lvm.md ├── fs.cl ├── hibernation.md └── plymouth.md ├── files ├── alacritty │ ├── alacritty.yml │ └── colorschemes │ │ ├── catppuccin-macchiato.yml │ │ └── dynamic.yml ├── anki-addons │ └── 877182321 │ │ └── meta.json ├── anki │ ├── deckbrowser.css │ ├── editor.css │ ├── overview.css │ ├── reviewer-bottom.css │ ├── reviewer.css │ ├── toolbar-bottom.css │ ├── toolbar.css │ └── webview.css ├── atuin │ └── config.toml ├── bash │ └── .bashrc ├── beets │ └── config.yaml ├── betterlockscreen │ └── betterlockscreenrc ├── bpython │ └── config ├── bspwm │ └── bspwmrc ├── cabal │ └── config ├── cli-visualizer │ ├── colors │ │ └── dracula │ └── config ├── cron │ └── crontab ├── doom │ ├── config.org │ ├── init.el │ └── packages.el ├── dunst │ └── dunstrc ├── etc │ ├── bluetooth │ │ └── main.conf │ ├── grub │ ├── mkinitcpio.conf │ ├── pacman.conf │ ├── plymouth.conf │ ├── profile │ └── sudoers.d │ │ └── suspend ├── eww │ ├── eww.scss │ └── eww.yuck ├── firefox │ ├── user.js │ ├── userChrome.css │ └── userContent.css ├── fish │ └── config.fish ├── fontconfig │ └── fonts.conf ├── games │ └── thewitcher │ │ ├── controls.txt │ │ └── input.settings ├── glava │ └── rc.glsl ├── gtk │ ├── gtkrc-2.0 │ └── settings.ini ├── lightdm │ ├── Xsession │ ├── lightdm-gtk-greeter.conf │ ├── lightdm-webkit2-greeter.conf │ └── lightdm.conf ├── lisp │ └── init.lisp ├── map2 │ ├── devices.list │ └── test.m2 ├── mirage │ └── settings.json ├── mutt │ ├── .mbsyncrc │ ├── README.md │ ├── accounts │ │ ├── username1@email.com.muttrc │ │ └── username2@email.com.muttrc │ ├── muttrc │ └── settings.muttrc ├── ncmpcpp │ ├── bindings │ └── config ├── npm │ └── npmrc ├── nvim │ ├── .gitignore │ ├── Makefile │ ├── after │ │ ├── queries │ │ │ ├── lua │ │ │ │ └── textobjects.scm │ │ │ └── markdown │ │ │ │ └── highlights.scm │ │ └── syntax │ │ │ └── markdown.vim │ ├── bootstrap.sh │ ├── fnl │ │ ├── feline-config.fnl │ │ ├── highlight.fnl │ │ ├── init.fnl │ │ ├── keymaps.fnl │ │ ├── lsp-util.fnl │ │ ├── options.fnl │ │ ├── paq.fnl │ │ ├── plugin-config.fnl │ │ ├── plugins.fnl │ │ └── util.fnl │ ├── ftplugin │ │ ├── c.lua │ │ ├── cpp.lua │ │ ├── java.lua │ │ ├── lisp.vim │ │ ├── make.lua │ │ ├── markdown.vim │ │ ├── norg.vim │ │ ├── rust.lua │ │ └── tex.vim │ ├── init.lua │ └── lazy-lock.json ├── picom │ └── picom.conf ├── polybar │ ├── config │ └── polybar.sh ├── python │ └── pythonrc ├── ranger │ ├── rc.conf │ └── scope.sh ├── redshift │ └── redshift.conf ├── rofi │ ├── config.rasi │ └── map.csv ├── shrc │ └── shrc.sh ├── ssh │ └── config ├── starship │ └── starship.toml ├── sway │ └── config ├── swaync │ ├── config.json │ └── style.css ├── sxhkd │ ├── sxhkdrc │ └── sxhkdrc_bspc ├── taskwarrior │ ├── hooks │ │ └── on-modify.timewarrior │ └── taskrc ├── tealdeer │ └── config.toml ├── terminfo │ ├── alacritty-full.terminfo │ ├── alacritty.terminfo │ ├── compile-terminfo.sh │ ├── tmux-256color-full.terminfo │ └── xterm-256color-full.terminfo ├── timewarrior │ └── timewarrior.cfg ├── tmux │ ├── tmux.conf │ └── tmux.conf.home ├── tofi │ └── config ├── tree-sitter │ └── config.json ├── ulauncher │ ├── ext_preferences │ │ └── com.github.ulauncher.ulauncher-hash.db │ ├── extensions.json │ ├── settings.json │ └── shortcuts.json ├── wezterm │ └── wezterm.lua ├── wofi │ ├── config │ └── style.css ├── zathura │ └── zathurarc └── zsh │ ├── zshenv │ ├── zshrc │ └── zshrc.home ├── flake.lock ├── flake.nix ├── nix ├── hardware │ ├── newpc.nix │ ├── pc.nix │ ├── x240.nix │ └── x270.nix ├── home-manager │ ├── adelie.nix │ ├── chinstrap.nix │ └── emperor.nix ├── modules │ ├── home-manager │ │ ├── default.nix │ │ ├── git.nix │ │ ├── gpg.nix │ │ ├── helix.nix │ │ ├── hyprland.nix │ │ ├── neovim.nix │ │ ├── shell.nix │ │ ├── theming.nix │ │ ├── tree-sitter.nix │ │ └── xdg-compliance.nix │ └── nixos │ │ ├── all-languages.nix │ │ ├── android.nix │ │ ├── aria2.nix │ │ ├── audio.nix │ │ ├── base.nix │ │ ├── bash.nix │ │ ├── battery-thing.nix │ │ ├── c.nix │ │ ├── common-lisp.nix │ │ ├── default.nix │ │ ├── desktop.nix │ │ ├── docker.nix │ │ ├── dynamic-wallpaper.nix │ │ ├── elm.nix │ │ ├── encryption.nix │ │ ├── fennel.nix │ │ ├── fix-suspend.nix │ │ ├── fonts.nix │ │ ├── gitega.nix │ │ ├── grocy.nix │ │ ├── haskell.nix │ │ ├── java.nix │ │ ├── javascript.nix │ │ ├── jellyfin.nix │ │ ├── latex.nix │ │ ├── lua.nix │ │ ├── math.nix │ │ ├── neovim.nix │ │ ├── networking.nix │ │ ├── nix.nix │ │ ├── nvidia.nix │ │ ├── ocaml.nix │ │ ├── open-rgb.nix │ │ ├── pandoc.nix │ │ ├── pix2tex.nix │ │ ├── postgres.nix │ │ ├── python.nix │ │ ├── radicale.nix │ │ ├── rust.nix │ │ ├── security.nix │ │ ├── shared-repos.nix │ │ ├── shell.nix │ │ ├── steam.nix │ │ ├── sway.nix │ │ ├── swaylock-plugin.nix │ │ ├── terminal.nix │ │ ├── tree-sitter.nix │ │ ├── typescript.nix │ │ ├── ulauncher.nix │ │ ├── virtual-machines.nix │ │ ├── wayland.nix │ │ ├── webdev.nix │ │ └── zsh.nix ├── nixos │ ├── adelie.nix │ ├── chinstrap.nix │ └── emperor.nix ├── nixpkgs.nix ├── overlays │ └── default.nix ├── pkgs │ ├── aria_ng │ │ └── default.nix │ ├── bemoji │ │ └── default.nix │ ├── default.nix │ ├── dynamic-wallpapers │ │ └── default.nix │ ├── eisvogel │ │ └── default.nix │ ├── fennel-language-server │ │ └── default.nix │ ├── firefox-trapped │ │ └── default.nix │ ├── homepage │ │ └── default.nix │ ├── logseq-wrapped │ │ └── default.nix │ ├── ltex-nightly │ │ └── default.nix │ ├── pfui │ │ └── default.nix │ ├── swaylock-plugin │ │ └── default.nix │ ├── tree-sitter-grammar │ │ └── default.nix │ ├── wofi-calc │ │ └── default.nix │ └── zotero-wrapped │ │ └── default.nix └── shell.nix ├── scripts ├── auto_commit.sh ├── autoclick.sh ├── backup_sh_history.sh ├── bsod.sh ├── bspwm-resize.sh ├── bspwm-swap-or-move-in.sh ├── colors.sh ├── cookie_clicker_ascend_loop.sh ├── download-deezer.sh ├── download_yt_music_favorites.sh ├── downscale-music-collection.sh ├── emoji-picker.sh ├── eww │ ├── mpd │ ├── start-eww │ ├── volume │ └── workspace ├── extract_norg.sh ├── fav-song.sh ├── filestat.sh ├── generate_audio_for_anki_deck.sh ├── get_deezer_album_links_by_id3_tags.sh ├── import_deezer_albums_to_beets.sh ├── is_program_running.sh ├── keeper_of_keys.sh ├── keyboard-layout-switcher.sh ├── mcfly_to_atuin.sh ├── mpd-open-playlist.sh ├── mpd-status.sh ├── open-firewall.sh ├── play-song.sh ├── program-launcher.sh ├── setup-repos.sh ├── sxhkd-help-page.sh ├── tmuxleft.sh ├── tmuxright.sh ├── tmuxstssrc.sh ├── transcode.sh ├── uptime.sh └── wally.sh └── secrets ├── aliases.txt └── smartdresultsemail /.dotter/.gitignore: -------------------------------------------------------------------------------- 1 | local.toml 2 | cache.toml 3 | cache/ 4 | -------------------------------------------------------------------------------- /.dotter/adelie.toml: -------------------------------------------------------------------------------- 1 | packages = [ 2 | "adelie", 3 | "sway", 4 | "tofi", 5 | "wofi", 6 | "tmux", 7 | "neovim", 8 | "zsh", 9 | "lisp", 10 | "taskwarrior", 11 | "ssh", 12 | "ncmcpp", 13 | "neomutt", 14 | "bash", 15 | "fish", 16 | "ranger", 17 | "system", 18 | "shrc", 19 | "catppuccin", 20 | "fantasque", 21 | "alacritty", 22 | "wezterm", 23 | "starship", 24 | "npm", 25 | "bpython", 26 | "cabal", 27 | "python", 28 | "atuin", 29 | "treesitter", 30 | "dunst", 31 | "scripts", 32 | "eww", 33 | "tealdeer", 34 | "ulauncher", 35 | "beets", 36 | ] 37 | -------------------------------------------------------------------------------- /.dotter/dingspad.toml: -------------------------------------------------------------------------------- 1 | packages = [ 2 | "redshift", 3 | "dingspad", 4 | "picom", 5 | "tmux", 6 | "neovim", 7 | "zsh", 8 | "lisp", 9 | "bspwm", 10 | "sxhkd", 11 | "zathura", 12 | "mirage", 13 | "lightdm", 14 | "taskwarrior", 15 | "ssh", 16 | "scripts", 17 | "polybar", 18 | "rofi", 19 | "ncmcpp", 20 | "neomutt", 21 | "bash", 22 | "fish", 23 | "ranger", 24 | "system", 25 | "gtk", 26 | "fonts", 27 | "shrc", 28 | "dracula", 29 | "fantasque", 30 | "alacritty", 31 | "wezterm", 32 | "starship", 33 | "dunst", 34 | "anki", 35 | "cli-visualizer", 36 | "npm", 37 | "bpython", 38 | "cabal", 39 | "python", 40 | "atuin", 41 | "treesitter", 42 | "ulauncher", 43 | "beets", 44 | ] 45 | 46 | [files] 47 | "files/firefox/user.js" = "~/.mozilla/firefox/5ivqh71m.default-release/user.js" 48 | "files/firefox/userChrome.css" = "~/.mozilla/firefox/5ivqh71m.default-release/chrome/userChrome.css" 49 | "files/firefox/userContent.css" = "~/.mozilla/firefox/5ivqh71m.default-release/chrome/userContent.css" 50 | -------------------------------------------------------------------------------- /.dotter/emperor.toml: -------------------------------------------------------------------------------- 1 | packages = [ 2 | "emperor", 3 | "redshift", 4 | "picom", 5 | "tmux", 6 | "neovim", 7 | # "zsh", 8 | "lisp", 9 | "bspwm", 10 | "sway", 11 | "sxhkd", 12 | "zathura", 13 | "mirage", 14 | "lightdm", 15 | "taskwarrior", 16 | "ssh", 17 | "scripts", 18 | "emacs", 19 | "eww", 20 | "rofi", 21 | "wofi", 22 | "tofi", 23 | "ncmcpp", 24 | "neomutt", 25 | "bash", 26 | "fish", 27 | "ranger", 28 | "system", 29 | # "gtk", 30 | "fonts", 31 | "shrc", 32 | "catppuccin", 33 | "fantasque", 34 | "alacritty", 35 | "wezterm", 36 | "starship", 37 | "dunst", 38 | "anki", 39 | "cli-visualizer", 40 | "npm", 41 | "bpython", 42 | "cabal", 43 | "python", 44 | "atuin", 45 | "treesitter", 46 | "tealdeer", 47 | "ulauncher", 48 | "beets", 49 | ] 50 | 51 | [files] 52 | # "files/firefox/user.js" = "~/.mozilla/firefox/ogee8zmb.default-release/user.js" 53 | # "files/firefox/userChrome.css" = "~/.mozilla/firefox/ogee8zmb.default-release/chrome/userChrome.css" 54 | # "files/firefox/userContent.css" = "~/.mozilla/firefox/ogee8zmb.default-release/chrome/userContent.css" 55 | -------------------------------------------------------------------------------- /.dotter/helpers/hex_remove_hash.rhai: -------------------------------------------------------------------------------- 1 | let color = params[0]; 2 | 3 | if color.starts_with("#") { 4 | color.sub_string(1) 5 | } else { 6 | color 7 | } 8 | -------------------------------------------------------------------------------- /.dotter/helpers/strings.rhai: -------------------------------------------------------------------------------- 1 | params[0] == params[1] 2 | -------------------------------------------------------------------------------- /.dotter/strawberrypi.toml: -------------------------------------------------------------------------------- 1 | packages = [ 2 | "server", 3 | "ssh", 4 | "tmux", 5 | "neovim", 6 | "zsh", 7 | "bash", 8 | "scripts", 9 | "profile", 10 | "system", 11 | "fonts", 12 | "shrc", 13 | "dracula", 14 | "firamono", 15 | "starship", 16 | "npm", 17 | "bpython", 18 | "cabal", 19 | "python", 20 | "atuin", 21 | "treesitter", 22 | ] 23 | -------------------------------------------------------------------------------- /.dotter/tracer.toml: -------------------------------------------------------------------------------- 1 | packages = [ 2 | "redshift", 3 | "laptop", 4 | "picom", 5 | "tmux", 6 | "neovim", 7 | "zsh", 8 | "bspwm", 9 | "sxhkd", 10 | "zathura", 11 | "ssh", 12 | "scripts", 13 | "polybar", 14 | "rofi", 15 | "ncmcpp", 16 | "neomutt", 17 | "bash", 18 | "fish", 19 | "ranger", 20 | "fonts", 21 | "shrc", 22 | "dracula", 23 | "firamono", 24 | "alacritty", 25 | "wezterm", 26 | "starship", 27 | "dunst", 28 | "npm", 29 | "bpython", 30 | "cabal", 31 | "python", 32 | "atuin", 33 | "treesitter", 34 | ] 35 | 36 | [files] 37 | "files/firefox/user.js" = "~/.mozilla/firefox/5ivqh71m.default-release/user.js" 38 | "files/firefox/userChrome.css" = "~/.mozilla/firefox/5ivqh71m.default-release/chrome/userChrome.css" 39 | "files/firefox/userContent.css" = "~/.mozilla/firefox/5ivqh71m.default-release/chrome/userContent.css" 40 | -------------------------------------------------------------------------------- /.envrc: -------------------------------------------------------------------------------- 1 | use flake . 2 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: "Test" 2 | on: 3 | pull_request: 4 | push: 5 | jobs: 6 | tests: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v3 10 | - uses: cachix/install-nix-action@v19 11 | - run: nix flake check 12 | - run: nix run .#format 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .direnv 2 | -------------------------------------------------------------------------------- /.sops.yaml: -------------------------------------------------------------------------------- 1 | keys: 2 | - &main_key 9F7D2083BB220CEEB720E068309D4C8689849C5B 3 | - &age_emperor age1ey5nqemqxfc7aferu3nyc7r4qt2yy6lz67l856auysnk9kk2e3js8t8u26 4 | creation_rules: 5 | - path_regex: secrets/[^/]+\.(yaml|json|env|ini|txt)$ 6 | key_groups: 7 | - pgp: 8 | - *main_key 9 | age: 10 | - *age_emperor 11 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: neovim dotter 2 | 3 | neovim: ./files/nvim/config.norg 4 | cd ./files/nvim/ && $(MAKE) all 5 | 6 | dotter: 7 | dotter deploy -f 8 | 9 | clean: 10 | cd ./files/nvim/ && $(MAKE) clean 11 | 12 | .PHONY: build_dir query clean 13 | 14 | -------------------------------------------------------------------------------- /docs/hibernation.md: -------------------------------------------------------------------------------- 1 | ## Getting Hibernation to Work 2 | 3 | ### Kernel Parameters 4 | 5 | (Edit `/etc/default/grub`) 6 | 7 | Find the `GRUB_CMDLINE_LINUX_DEFAULT` option, add the following: 8 | 9 | - `resume=/dev/sdX1` (Parition containing swapfile, can also be uuid) 10 | - `resume_offset=OFFSET` (Offset, can be obtained with the following command: `filefrag -v /swapfile | awk '$1=="0:" {print substr($4, 1, length($4)-2)}'`, alternatively execute `filefrag -v /swapfile` and look for the first value in the physical_offset column, row 0) 11 | 12 | ### Hook 13 | 14 | (Edit `/etc/mkinitcpio.conf`) 15 | 16 | Add the resume hook after base & udev (before plymouth): 17 | ``` 18 | HOOKS=(base udev resume [...] ) 19 | ``` 20 | 21 | ## Make changes take effect 22 | 23 | `sudo mkinitcpio -p linux --generate /boot/initramfs-linux.img` 24 | 25 | `sudo grub-mkconfig --output=/boot/grub/grub.cfg` 26 | -------------------------------------------------------------------------------- /docs/plymouth.md: -------------------------------------------------------------------------------- 1 | ## Getting Plymouth to Work 2 | 3 | ### Hook 4 | 5 | (Edit `/etc/mkinitcpio.conf`) 6 | 7 | Add the plymouth hook after base & udev: 8 | ``` 9 | HOOKS=(base udev plymouth [...] ) 10 | ``` 11 | 12 | ### KMS 13 | 14 | (Still `/etc/mkinitcpio.conf`) 15 | 16 | Intel: 17 | ``` 18 | MODULES=(i915) 19 | ``` 20 | ATI: 21 | ``` 22 | MODULES=(radeon) 23 | ``` 24 | NVIDIA: 25 | ``` 26 | MODULES=(nouveau) 27 | ``` 28 | 29 | ### Kernel Parameters 30 | 31 | (Edit `etc/default/grub`) 32 | 33 | Find the `GRUB_CMDLINE_LINUX_DEFAULT` option, try adding the following: 34 | 35 | - quiet 36 | - splash 37 | - vga=current 38 | - loglevel=0 39 | - rd.udev.log_priority=0 40 | - vt.global_cursor_default=0 41 | 42 | You might have to enable KMS here as well using the following parameter: 43 | 44 | - i915.modeset=1 45 | 46 | ## Make changes take effect 47 | 48 | `sudo mkinitcpio -p linux --generate /boot/initramfs-linux.img` 49 | 50 | `sudo grub-mkconfig --output=/boot/grub/grub.cfg` (running without `--output` is only a dry-run, took me way too long to realise that) 51 | 52 | Then reboot. Good luck, you're gonna need it. 53 | 54 | ## Smooth transition to display manager 55 | 56 | Disable the service for display manager, for example `sudo systemctl disable lighdm`, then enable the plymouth service for that, for example `sudo systemctl enable lightdm-plymouth` 57 | -------------------------------------------------------------------------------- /files/alacritty/colorschemes/catppuccin-macchiato.yml: -------------------------------------------------------------------------------- 1 | colors: 2 | # Default colors 3 | primary: 4 | background: "#24273A" # base 5 | foreground: "#CAD3F5" # text 6 | # Bright and dim foreground colors 7 | dim_foreground: "#CAD3F5" # text 8 | bright_foreground: "#CAD3F5" # text 9 | 10 | # Cursor colors 11 | cursor: 12 | text: "#24273A" # base 13 | cursor: "#F4DBD6" # rosewater 14 | vi_mode_cursor: 15 | text: "#24273A" # base 16 | cursor: "#B7BDF8" # lavender 17 | 18 | # Search colors 19 | search: 20 | matches: 21 | foreground: "#24273A" # base 22 | background: "#A5ADCB" # subtext0 23 | focused_match: 24 | foreground: "#24273A" # base 25 | background: "#A6DA95" # green 26 | footer_bar: 27 | foreground: "#24273A" # base 28 | background: "#A5ADCB" # subtext0 29 | 30 | # Keyboard regex hints 31 | hints: 32 | start: 33 | foreground: "#24273A" # base 34 | background: "#EED49F" # yellow 35 | end: 36 | foreground: "#24273A" # base 37 | background: "#A5ADCB" # subtext0 38 | 39 | # Selection colors 40 | selection: 41 | text: "#24273A" # base 42 | background: "#F4DBD6" # rosewater 43 | 44 | # Normal colors 45 | normal: 46 | black: "#494D64" # surface1 47 | red: "#ED8796" # red 48 | green: "#A6DA95" # green 49 | yellow: "#EED49F" # yellow 50 | blue: "#8AADF4" # blue 51 | magenta: "#F5BDE6" # pink 52 | cyan: "#8BD5CA" # teal 53 | white: "#B8C0E0" # subtext1 54 | 55 | # Bright colors 56 | bright: 57 | black: "#5B6078" # surface2 58 | red: "#ED8796" # red 59 | green: "#A6DA95" # green 60 | yellow: "#EED49F" # yellow 61 | blue: "#8AADF4" # blue 62 | magenta: "#F5BDE6" # pink 63 | cyan: "#8BD5CA" # teal 64 | white: "#A5ADCB" # subtext0 65 | 66 | # Dim colors 67 | dim: 68 | black: "#494D64" # surface1 69 | red: "#ED8796" # red 70 | green: "#A6DA95" # green 71 | yellow: "#EED49F" # yellow 72 | blue: "#8AADF4" # blue 73 | magenta: "#F5BDE6" # pink 74 | cyan: "#8BD5CA" # teal 75 | white: "#B8C0E0" # subtext1 76 | 77 | indexed_colors: 78 | - { index: 16, color: "#F5A97F" } 79 | - { index: 17, color: "#F4DBD6" } 80 | -------------------------------------------------------------------------------- /files/alacritty/colorschemes/dynamic.yml: -------------------------------------------------------------------------------- 1 | colors: 2 | # Default colors 3 | primary: 4 | background: '{{ colors.bg }}' 5 | foreground: '{{ colors.fg }}' 6 | 7 | # Bright and dim foreground colors 8 | # 9 | # The dimmed foreground color is calculated automatically if it is not present. 10 | # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` 11 | # is `false`, the normal foreground color will be used. 12 | # dim_foreground: '#f2f2f2' 13 | # bright_foreground: '#f8f8f8' 14 | 15 | # Cursor colors 16 | # 17 | # Colors which should be used to draw the terminal cursor. If these are unset, 18 | # the cursor color will be the inverse of the cell color. 19 | cursor: 20 | # text: '#000000' 21 | cursor: '{{ colors.c5 }}' 22 | 23 | # Selection colors 24 | # 25 | # Colors which should be used to draw the selection area. If selection 26 | # background is unset, selection color will be the inverse of the cell colors. 27 | # If only text is unset the cell text color will remain the same. 28 | selection: 29 | # text: '{{ colors.fg }}' 30 | background: '{{ colors.purple }}' 31 | 32 | # Normal colors 33 | normal: 34 | black: '{{ colors.c0 }}' 35 | red: '{{ colors.c1 }}' 36 | green: '{{ colors.c2 }}' 37 | yellow: '{{ colors.c3 }}' 38 | cyan: '{{ colors.c6 }}' 39 | blue: '{{ colors.c4 }}' 40 | magenta: '{{ colors.c5 }}' 41 | white: '{{ colors.c7 }}' 42 | 43 | # Bright colors 44 | bright: 45 | black: '{{ colors.c8 }}' 46 | red: '{{ colors.c9 }}' 47 | green: '{{ colors.c10 }}' 48 | yellow: '{{ colors.c11 }}' 49 | cyan: '{{ colors.c14 }}' 50 | blue: '{{ colors.c12 }}' 51 | magenta: '{{ colors.c13 }}' 52 | white: '{{ colors.c15 }}' 53 | 54 | # Dim colors 55 | # 56 | # If the dim colors are not set, they will be calculated automatically based 57 | # on the `normal` colors. 58 | dim: 59 | black: '{{ colors.c16 }}' 60 | red: '{{ colors.c17 }}' 61 | green: '{{ colors.c18 }}' 62 | yellow: '{{ colors.c19 }}' 63 | cyan: '{{ colors.c22 }}' 64 | blue: '{{ colors.c20 }}' 65 | magenta: '{{ colors.c21 }}' 66 | white: '{{ colors.c23 }}' 67 | 68 | # Indexed Colors 69 | # 70 | # The indexed colors include all colors from 16 to 256. 71 | # When these are not set, they're filled with sensible defaults. 72 | # 73 | # Example: 74 | # `- { index: 16, color: '#ff00ff' }` 75 | # 76 | #indexed_colors: [] 77 | -------------------------------------------------------------------------------- /files/anki/deckbrowser.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | .review-count { 3 | color: #0a0; 4 | } 5 | 6 | .new-count { 7 | color: #00a; 8 | } 9 | 10 | .learn-count { 11 | color: #C35617; 12 | } 13 | 14 | .zero-count { 15 | color: #ddd; 16 | } 17 | 18 | .nightMode .review-count { 19 | color: #5CcC00; 20 | } 21 | .nightMode .new-count { 22 | color: #77ccff; 23 | } 24 | .nightMode .learn-count { 25 | color: #FF935B; 26 | } 27 | .nightMode .zero-count { 28 | color: #444; 29 | } 30 | 31 | /* Copyright: Ankitects Pty Ltd and contributors 32 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 33 | a.deck { 34 | color: black; 35 | text-decoration: none; 36 | min-width: 5em; 37 | display: inline-block; 38 | } 39 | 40 | a.deck:hover { 41 | text-decoration: underline; 42 | } 43 | 44 | /* This is the list of decks, set the background color to that gray and set the padding to a higher value, this makes it so there is more space between the decks */ 45 | tr.deck td { 46 | background-color: #29292B; 47 | padding: 10px; 48 | } 49 | 50 | tr.top-level-drag-row td { 51 | border-bottom: 1px solid transparent; 52 | } 53 | 54 | td { 55 | white-space: nowrap; 56 | } 57 | 58 | tr.drag-hover td { 59 | border-bottom: 1px solid #aaa; 60 | } 61 | 62 | body.nightMode { 63 | margin: 1em; 64 | -webkit-user-select: none; 65 | /* background-image: url("2.gif"); */ 66 | background-position: center; 67 | background-repeat: no-repeat; 68 | background-size: cover; 69 | } 70 | 71 | .current { 72 | background-color: #e7e7e7; 73 | } 74 | 75 | .decktd { 76 | min-width: 15em; 77 | } 78 | 79 | .count { 80 | min-width: 4em; 81 | text-align: right; 82 | } 83 | 84 | .optscol { 85 | width: 2em; 86 | } 87 | 88 | .collapse { 89 | color: black; 90 | text-decoration: none; 91 | display: inline-block; 92 | width: 1em; 93 | } 94 | 95 | .filtered { 96 | color: #00a !important; 97 | } 98 | 99 | .gears { 100 | width: 1em; 101 | height: 1em; 102 | opacity: 0.5; 103 | padding-top: 0.2em; 104 | } 105 | 106 | .nightMode a.deck { 107 | color: white; 108 | } 109 | /* This is for the lines in between the decks in the list, I set it to a shade of blue matching my enhance main window config */ 110 | .nightMode tr.deck td { 111 | border-bottom-color: {{ colors.prm }}; 112 | } 113 | .nightMode tr.drag-hover td { 114 | border-bottom-color: #777; 115 | } 116 | .nightMode .current { 117 | background-color: #29292B; 118 | } 119 | .nightMode .collapse { 120 | color: white; 121 | } 122 | /* The gears have a more light color per default, remove the line of code in this block to get rid of that */ 123 | .nightMode .gears { 124 | } 125 | .nightMode .filtered { 126 | color: {{ colors.prm }} !important; 127 | } 128 | -------------------------------------------------------------------------------- /files/anki/editor.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | /* Copyright: Ankitects Pty Ltd and contributors 3 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 4 | .field { 5 | border: 1px solid #aaa; 6 | background: white; 7 | color: black; 8 | padding: 5px; 9 | overflow-wrap: break-word; 10 | } 11 | 12 | .clearfix:after { 13 | content: ""; 14 | display: table; 15 | clear: both; 16 | } 17 | 18 | .fname { 19 | vertical-align: middle; 20 | padding: 0; 21 | } 22 | 23 | img { 24 | max-width: 90%; 25 | } 26 | 27 | body { 28 | margin: 0; 29 | } 30 | 31 | #topbutsOuter { 32 | position: fixed; 33 | top: 0; 34 | padding: 2px; 35 | left: 0; 36 | right: 0; 37 | z-index: 1; 38 | } 39 | 40 | .topbut { 41 | width: 16px; 42 | height: 16px; 43 | margin-top: 4px; 44 | } 45 | 46 | .rainbow { 47 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f77), color-stop(50%, #7f7), color-stop(100%, #77f)); 48 | } 49 | 50 | button.linkb { 51 | -webkit-appearance: none; 52 | border: 0; 53 | box-shadow: none; 54 | padding: 0px 2px; 55 | background: transparent; 56 | } 57 | 58 | .linkb:disabled { 59 | opacity: 0.3; 60 | cursor: not-allowed; 61 | } 62 | 63 | .highlighted { 64 | border-bottom: 3px solid #000; 65 | } 66 | 67 | #fields { 68 | margin-top: 35px; 69 | } 70 | 71 | .dupe { 72 | background: #aa5555; 73 | } 74 | 75 | .nightMode .field { 76 | border-color: #777; 77 | background: #3a3a3a; 78 | color: white; 79 | } 80 | .nightMode button.linkb > img { 81 | filter: invert(180); 82 | } 83 | .nightMode .dupe { 84 | background: #aa5555; 85 | } 86 | .nightMode #dupes a { 87 | color: #77ccff; 88 | } 89 | 90 | .drawing { 91 | zoom: 50%; 92 | } 93 | 94 | .nightMode img.drawing { 95 | filter: invert() hue-rotate(180deg); 96 | } 97 | -------------------------------------------------------------------------------- /files/anki/overview.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | .review-count { 3 | color: #0a0; 4 | } 5 | 6 | .new-count { 7 | color: #00a; 8 | } 9 | 10 | .learn-count { 11 | color: #C35617; 12 | } 13 | 14 | .zero-count { 15 | color: #ddd; 16 | } 17 | 18 | .nightMode .review-count { 19 | color: #5CcC00; 20 | } 21 | .nightMode .new-count { 22 | color: #77ccff; 23 | } 24 | .nightMode .learn-count { 25 | color: #FF935B; 26 | } 27 | .nightMode .zero-count { 28 | color: #444; 29 | } 30 | 31 | /* Copyright: Ankitects Pty Ltd and contributors 32 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 33 | .smallLink { 34 | font-size: 10px; 35 | } 36 | 37 | h3 { 38 | margin-bottom: 0; 39 | } 40 | 41 | .descfont { 42 | padding: 1em; 43 | color: #333; 44 | } 45 | 46 | .description { 47 | white-space: pre-wrap; 48 | } 49 | 50 | #fulldesc { 51 | display: none; 52 | } 53 | 54 | .descmid { 55 | width: 70%; 56 | margin: 0 auto 0; 57 | text-align: left; 58 | } 59 | 60 | .dyn { 61 | text-align: center; 62 | } 63 | 64 | .nightMode .descfont { 65 | color: #ccc; 66 | } 67 | -------------------------------------------------------------------------------- /files/anki/reviewer-bottom.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | .review-count { 3 | color: #0a0; 4 | } 5 | 6 | .new-count { 7 | color: #00a; 8 | } 9 | 10 | .learn-count { 11 | color: #C35617; 12 | } 13 | 14 | .zero-count { 15 | color: #ddd; 16 | } 17 | 18 | .nightMode .review-count { 19 | color: #5CcC00; 20 | } 21 | .nightMode .new-count { 22 | color: #77ccff; 23 | } 24 | .nightMode .learn-count { 25 | color: #FF935B; 26 | } 27 | .nightMode .zero-count { 28 | color: #444; 29 | } 30 | 31 | /* Copyright: Ankitects Pty Ltd and contributors 32 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 33 | body { 34 | margin: 0; 35 | padding: 0; 36 | } 37 | 38 | button { 39 | min-width: 60px; 40 | white-space: nowrap; 41 | margin: 0.5em; 42 | } 43 | 44 | .hitem { 45 | margin-top: 2px; 46 | } 47 | 48 | .stat { 49 | padding-top: 5px; 50 | } 51 | 52 | .stat2 { 53 | padding-top: 3px; 54 | font-weight: normal; 55 | } 56 | 57 | .stattxt { 58 | padding-left: 5px; 59 | padding-right: 5px; 60 | white-space: nowrap; 61 | } 62 | 63 | #ansbut { 64 | margin-bottom: 1em; 65 | } 66 | 67 | .nobold { 68 | font-weight: normal; 69 | display: inline-block; 70 | padding-top: 4px; 71 | } 72 | 73 | .spacer { 74 | height: 18px; 75 | } 76 | 77 | .spacer2 { 78 | height: 16px; 79 | } 80 | 81 | #outer { 82 | border-top: 1px solid #aaa; 83 | } 84 | 85 | #innertable { 86 | padding: 3px; 87 | } 88 | 89 | .nightMode #outer { 90 | border-top-color: #29292B; 91 | } 92 | -------------------------------------------------------------------------------- /files/anki/reviewer.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | /* Copyright: Ankitects Pty Ltd and contributors 3 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 4 | hr { 5 | background-color: #ccc; 6 | } 7 | 8 | body { 9 | margin: 20px; 10 | overflow-wrap: break-word; 11 | } 12 | 13 | body.nightMode { 14 | background-color: #2f2f31; 15 | color: white; 16 | } 17 | 18 | img { 19 | max-width: 95%; 20 | max-height: 95vh; 21 | } 22 | 23 | #_flag { 24 | position: fixed; 25 | right: 10px; 26 | top: 0; 27 | font-size: 30px; 28 | display: none; 29 | -webkit-text-stroke-width: 1px; 30 | -webkit-text-stroke-color: black; 31 | } 32 | 33 | #_mark { 34 | position: fixed; 35 | left: 10px; 36 | top: 0; 37 | font-size: 30px; 38 | color: yellow; 39 | display: none; 40 | -webkit-text-stroke-width: 1px; 41 | -webkit-text-stroke-color: black; 42 | } 43 | 44 | #typeans { 45 | width: 100%; 46 | } 47 | 48 | .typeGood { 49 | background: #0f0; 50 | } 51 | 52 | .typeBad { 53 | background: #f00; 54 | } 55 | 56 | .typeMissed { 57 | background: #ccc; 58 | } 59 | 60 | .replay-button { 61 | text-decoration: none; 62 | display: inline-flex; 63 | vertical-align: middle; 64 | margin: 3px; 65 | } 66 | .replay-button svg { 67 | width: 40px; 68 | height: 40px; 69 | } 70 | .replay-button svg circle { 71 | fill: #fff; 72 | stroke: #414141; 73 | } 74 | .replay-button svg path { 75 | fill: #414141; 76 | } 77 | 78 | .nightMode .latex { 79 | filter: invert(100%); 80 | } 81 | 82 | .drawing { 83 | zoom: 50%; 84 | } 85 | 86 | .nightMode img.drawing { 87 | filter: invert(1) hue-rotate(180deg); 88 | } 89 | -------------------------------------------------------------------------------- /files/anki/toolbar-bottom.css: -------------------------------------------------------------------------------- 1 | /* Copyright: Ankitects Pty Ltd and contributors 2 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 3 | #header { 4 | border-bottom: 0; 5 | margin-bottom: 6px; 6 | margin-top: 0; 7 | padding: 9px; 8 | } 9 | -------------------------------------------------------------------------------- /files/anki/toolbar.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | /* Copyright: Ankitects Pty Ltd and contributors 3 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 4 | #header { 5 | padding: 3px; 6 | font-weight: bold; 7 | border-bottom: 1px solid #aaa; 8 | } 9 | 10 | .tdcenter { 11 | white-space: nowrap; 12 | } 13 | 14 | body { 15 | margin: 0; 16 | padding: 0; 17 | -webkit-user-select: none; 18 | overflow: hidden; 19 | } 20 | 21 | * { 22 | -webkit-user-drag: none; 23 | } 24 | 25 | .hitem { 26 | padding-right: 12px; 27 | padding-left: 12px; 28 | text-decoration: none; 29 | color: black; 30 | } 31 | 32 | .hitem:hover { 33 | text-decoration: underline; 34 | } 35 | 36 | .hitem:focus { 37 | outline: 0; 38 | } 39 | 40 | /* This is the color of the text of the toolbar at the top, I set it to blue again but I'm not sure yet if I'm going to keep it or not */ 41 | .nightMode .hitem { 42 | color: {{ colors.prm }}; 43 | } 44 | /* This is the little stripe between the toolbar at the top and the part of the screen containing the decks, I set it to the same shade of blue */ 45 | .nightMode #header { 46 | border-bottom-color: {{ colors.prm }}; 47 | } 48 | 49 | .isMac.nightMode #header { 50 | border-bottom-color: #3a3a3a; 51 | } 52 | 53 | @keyframes spin { 54 | 0% { 55 | -webkit-transform: rotate(0deg); 56 | } 57 | 100% { 58 | -webkit-transform: rotate(360deg); 59 | } 60 | } 61 | .spin { 62 | animation: spin; 63 | animation-duration: 2s; 64 | animation-iteration-count: infinite; 65 | display: inline-block; 66 | visibility: visible !important; 67 | animation-timing-function: linear; 68 | } 69 | 70 | #sync-spinner { 71 | width: 16px; 72 | height: 16px; 73 | margin-bottom: -3px; 74 | visibility: hidden; 75 | } 76 | -------------------------------------------------------------------------------- /files/anki/webview.css: -------------------------------------------------------------------------------- 1 | /* night-mode-specific colours */ 2 | .isWin button { 3 | font-size: 12px; 4 | } 5 | 6 | .isMac button { 7 | font-size: 13px; 8 | } 9 | 10 | .isLin button { 11 | font-size: 14px; 12 | -webkit-appearance: none; 13 | border-radius: 3px; 14 | padding: 5px; 15 | border: 1px solid #aaa; 16 | } 17 | 18 | .nightMode button { 19 | -webkit-appearance: none; 20 | color: white; 21 | /* match the fusion button gradient */ 22 | background: linear-gradient(0deg, #555555 0%, #656565 100%); 23 | box-shadow: 0 0 3px #222222; 24 | border: 1px solid #646464; 25 | border-radius: 2px; 26 | padding: 10px; 27 | padding-top: 3px; 28 | padding-bottom: 3px; 29 | } 30 | .nightMode button:hover { 31 | background: #656565; 32 | } 33 | 34 | /* imitate standard macOS dark mode buttons */ 35 | .isMac.nightMode.macos-dark-mode button:not(.linkb) { 36 | background: #656565; 37 | box-shadow: 0 1px 2px #222222; 38 | border-top-color: #848484; 39 | border-top-width: 0.5px; 40 | border-bottom: 0; 41 | border-left: 0; 42 | border-right: 0; 43 | padding-top: 2px; 44 | padding-bottom: 2px; 45 | padding-left: 15px; 46 | padding-right: 15px; 47 | color: #e5e5e5; 48 | } 49 | 50 | /* Copyright: Ankitects Pty Ltd and contributors 51 | * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ 52 | body { 53 | margin: 2em; 54 | color: black; 55 | } 56 | 57 | h1 { 58 | margin-bottom: 0.2em; 59 | } 60 | 61 | a { 62 | color: #00a; 63 | } 64 | 65 | body.nightMode { 66 | color: white; 67 | background: #2f2f31; 68 | } 69 | 70 | body.nightMode::-webkit-scrollbar { 71 | background: #2f2f31; 72 | } 73 | 74 | body.nightMode::-webkit-scrollbar:horizontal { 75 | height: 12px; 76 | } 77 | 78 | body.nightMode::-webkit-scrollbar:vertical { 79 | width: 12px; 80 | } 81 | 82 | body.nightMode::-webkit-scrollbar-thumb { 83 | background: #656565; 84 | border-radius: 8px; 85 | } 86 | 87 | body.nightMode::-webkit-scrollbar-thumb:horizontal { 88 | min-width: 50px; 89 | } 90 | 91 | body.nightMode::-webkit-scrollbar-thumb:vertical { 92 | min-height: 50px; 93 | } 94 | 95 | .nightMode a { 96 | color: #77ccff; 97 | } 98 | 99 | body { 100 | overscroll-behavior: none; 101 | } 102 | -------------------------------------------------------------------------------- /files/atuin/config.toml: -------------------------------------------------------------------------------- 1 | dialect = "uk" 2 | 3 | # auto_sync = true 4 | 5 | # sync_frequency = "180m" 6 | 7 | sync_address = "https://api.atuin.sh" 8 | 9 | search_mode = "fuzzy" 10 | 11 | update_check = false 12 | -------------------------------------------------------------------------------- /files/beets/config.yaml: -------------------------------------------------------------------------------- 1 | library: "~/Music/library.db" 2 | # plugins: chroma fromfilename fetchart lyrics lastgenre spotify deezer 3 | plugins: chroma fromfilename acousticbrainz mbsync fetchart lyrics lastgenre spotify deezer mpdupdate 4 | 5 | deezer: 6 | source_weight: 1.0 7 | 8 | spotify: 9 | source_weight: 0.0 10 | 11 | musicbrainz: 12 | source_weight: 0.0 13 | genres: yes 14 | 15 | chroma: 16 | source_weight: 0.0 17 | auto: yes 18 | 19 | fromfilename: 20 | source_weight: 0.0 21 | 22 | match: 23 | strong_rec_thresh: 0.80 24 | medium_rec_thresh: 0.50 25 | max_rec: 26 | missing_tracks: strong 27 | track_title: low 28 | unmachted_tracks: low 29 | -------------------------------------------------------------------------------- /files/betterlockscreen/betterlockscreenrc: -------------------------------------------------------------------------------- 1 | # configuration file for betterlockscreen 2 | 3 | insidecolor=00000000 4 | ringcolor=ffffffff 5 | keyhlcolor=d23c3dff 6 | bshlcolor=d23c3dff 7 | separatorcolor=00000000 8 | insidevercolor=00000000 9 | insidewrongcolor=d23c3dff 10 | ringvercolor=ffffffff 11 | ringwrongcolor=ffffffff 12 | verifcolor=ffffffff 13 | timecolor=ffffffff 14 | datecolor=ffffffff 15 | loginbox=00000066 -------------------------------------------------------------------------------- /files/bpython/config: -------------------------------------------------------------------------------- 1 | [general] 2 | hist_file = $XDG_DATA_HOME/bpythonhistory 3 | -------------------------------------------------------------------------------- /files/cli-visualizer/colors/dracula: -------------------------------------------------------------------------------- 1 | {{ colors.cyan }} 2 | {{ colors.green }} 3 | {{ colors.orange }} 4 | {{ colors.pink }} 5 | {{ colors.purple }} 6 | {{ colors.red }} 7 | {{ colors.yellow }} 8 | -------------------------------------------------------------------------------- /files/cron/crontab: -------------------------------------------------------------------------------- 1 | */10 * * * * /usr/bin/mbsync -a -c "~/.config/isync/mbsyncrc" 2 | 5 */2 * * * /usr/bin/pacman -Syuw --noconfirm 3 | 0 17 * * * /usr/bin/env sh /home/b3nj4m1n/Documents/Github/gitega/update.sh "/home/b3nj4m1n/.gitega" "EMAIL"; XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send "Updated github stats." 4 | 10 * * * * /usr/bin/env sh ~/.local/share/bin/auto_commit.sh "/home/b3nj4m1n/.local/share/task" true 5 | 42 17 * * * /usr/bin/env sh ~/.local/share/bin/auto_commit.sh "/home/b3nj4m1n/.local/share/task" false 6 | 11 * * * * /usr/bin/env sh ~/.local/share/bin/auto_commit.sh "/home/b3nj4m1n/.local/share/timew/data" true 7 | 43 17 * * * /usr/bin/env sh ~/.local/share/bin/auto_commit.sh "/home/b3nj4m1n/.local/share/timew/data" false 8 | 12 * * * * /usr/bin/env sh ~/.local/share/bin/backup_sh_history.sh "/home/b3nj4m1n/.local/share/sh_history/history" true 9 | 44 17 * * * /usr/bin/env sh ~/.local/share/bin/backup_sh_history.sh "/home/b3nj4m1n/.local/share/sh_history/history" false 10 | -------------------------------------------------------------------------------- /files/doom/packages.el: -------------------------------------------------------------------------------- 1 | ;; -*- no-byte-compile: t; -*- 2 | ;;; $DOOMDIR/packages.el 3 | 4 | ;; To install a package with Doom you must declare them here and run 'doom sync' 5 | ;; on the command line, then restart Emacs for the changes to take effect -- or 6 | ;; use 'M-x doom/reload'. 7 | 8 | 9 | ;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: 10 | ;(package! some-package) 11 | 12 | ;; To install a package directly from a remote git repo, you must specify a 13 | ;; `:recipe'. You'll find documentation on what `:recipe' accepts here: 14 | ;; https://github.com/raxod502/straight.el#the-recipe-format 15 | ;(package! another-package 16 | ; :recipe (:host github :repo "username/repo")) 17 | 18 | ;; If the package you are trying to install does not contain a PACKAGENAME.el 19 | ;; file, or is located in a subdirectory of the repo, you'll need to specify 20 | ;; `:files' in the `:recipe': 21 | ;(package! this-package 22 | ; :recipe (:host github :repo "username/repo" 23 | ; :files ("some-file.el" "src/lisp/*.el"))) 24 | 25 | ;; If you'd like to disable a package included with Doom, you can do so here 26 | ;; with the `:disable' property: 27 | ;(package! builtin-package :disable t) 28 | 29 | ;; You can override the recipe of a built in package without having to specify 30 | ;; all the properties for `:recipe'. These will inherit the rest of its recipe 31 | ;; from Doom or MELPA/ELPA/Emacsmirror: 32 | ;(package! builtin-package :recipe (:nonrecursive t)) 33 | ;(package! builtin-package-2 :recipe (:repo "myfork/package")) 34 | 35 | ;; Specify a `:branch' to install a package from a particular branch or tag. 36 | ;; This is required for some packages whose default branch isn't 'master' (which 37 | ;; our package manager can't deal with; see raxod502/straight.el#279) 38 | ;(package! builtin-package :recipe (:branch "develop")) 39 | 40 | ;; Use `:pin' to specify a particular commit to install. 41 | ;(package! builtin-package :pin "1a2b3c4d5e") 42 | 43 | 44 | ;; Doom's packages are pinned to a specific commit and updated from release to 45 | ;; release. The `unpin!' macro allows you to unpin single packages... 46 | ;(unpin! pinned-package) 47 | ;; ...or multiple packages 48 | ;(unpin! pinned-package another-pinned-package) 49 | ;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) 50 | ;(unpin! t) 51 | (package! peep-dired) 52 | (package! atomic-chrome) 53 | -------------------------------------------------------------------------------- /files/dunst/dunstrc: -------------------------------------------------------------------------------- 1 | [global] 2 | monitor = 0 3 | follow = mouse 4 | geometry = "250x50-30+58" 5 | indicate_hidden = yes 6 | shrink = no 7 | separator_height = 3 8 | padding = 16 9 | horizontal_padding = 24 10 | frame_width = 3 11 | sort = no 12 | idle_threshold = 120 13 | font = {{ font.font }} {{ font.font_size }} 14 | line_height = 4 15 | markup = full 16 | format = "%s\n%b" 17 | alignment = left 18 | show_age_threshold = 60 19 | word_wrap = yes 20 | ignore_newline = no 21 | stack_duplicates = false 22 | hide_duplicate_count = yes 23 | show_indicators = no 24 | icon_position = off 25 | sticky_history = yes 26 | history_length = 20 27 | browser = /usr/bin/firefox -new-tab 28 | always_run_script = true 29 | title = Dunst 30 | class = Dunst 31 | frame_color = "{{ colors.prm }}" 32 | separator_color = frame 33 | transparency = 60 34 | 35 | [shortcuts] 36 | close = ctrl+space 37 | close_all = ctrl+shift+space 38 | 39 | [urgency_low] 40 | background = "{{ colors.bg }}" 41 | foreground = "{{ colors.c15 }}" 42 | frame_color = "{{ colors.prm }}" 43 | timeout = 10 44 | 45 | [urgency_normal] 46 | background = "{{ colors.bg }}" 47 | foreground = "{{ colors.c15 }}" 48 | frame_color = "{{ colors.prm_dim }}" 49 | timeout = 10 50 | 51 | [urgency_critical] 52 | background = "{{ colors.bg }}" 53 | foreground = "{{ colors.fg_bright }}" 54 | frame_color = "{{ colors.c17 }}" 55 | timeout = 0 56 | -------------------------------------------------------------------------------- /files/etc/grub: -------------------------------------------------------------------------------- 1 | # GRUB boot loader configuration 2 | 3 | GRUB_DEFAULT=0 4 | GRUB_TIMEOUT=5 5 | GRUB_DISTRIBUTOR="Arch" 6 | GRUB_CMDLINE_LINUX_DEFAULT="{{#if kernel_parameters_default}}{{kernel_parameters_default}}{{/if}}" 7 | GRUB_CMDLINE_LINUX="{{#if kernel_parameters}}{{kernel_parameters}}{{/if}}" 8 | 9 | # Preload both GPT and MBR modules so that they are not missed 10 | GRUB_PRELOAD_MODULES="part_gpt part_msdos" 11 | 12 | # Uncomment to enable booting from LUKS encrypted devices 13 | #GRUB_ENABLE_CRYPTODISK=y 14 | 15 | # Set to 'countdown' or 'hidden' to change timeout behavior, 16 | # press ESC key to display menu. 17 | GRUB_TIMEOUT_STYLE=menu 18 | 19 | # Uncomment to use basic console 20 | GRUB_TERMINAL_INPUT=console 21 | 22 | # Uncomment to disable graphical terminal 23 | #GRUB_TERMINAL_OUTPUT=console 24 | 25 | # The resolution used on graphical terminal 26 | # note that you can use only modes which your graphic card supports via VBE 27 | # you can see them in real GRUB with the command `vbeinfo' 28 | GRUB_GFXMODE={{#if grub_res}}{{grub_res}}{{else}}auto{{/if}} 29 | 30 | # Uncomment to allow the kernel use the same resolution used by grub 31 | GRUB_GFXPAYLOAD_LINUX=keep 32 | 33 | # Uncomment if you want GRUB to pass to the Linux kernel the old parameter 34 | # format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" 35 | #GRUB_DISABLE_LINUX_UUID=true 36 | 37 | # Uncomment to disable generation of recovery mode menu entries 38 | GRUB_DISABLE_RECOVERY=true 39 | 40 | # Uncomment and set to the desired menu colors. Used by normal and wallpaper 41 | # modes only. Entries specified as foreground/background. 42 | #GRUB_COLOR_NORMAL="light-blue/black" 43 | #GRUB_COLOR_HIGHLIGHT="light-cyan/blue" 44 | 45 | # Uncomment one of them for the gfx desired, a image background or a gfxtheme 46 | #GRUB_BACKGROUND="/path/to/wallpaper" 47 | #GRUB_THEME="/path/to/gfxtheme" 48 | {{#if grub_theme}}GRUB_THEME="{{grub_theme}}"{{/if}} 49 | 50 | # Uncomment to get a beep at GRUB start 51 | #GRUB_INIT_TUNE="480 440 1" 52 | 53 | # Uncomment to make GRUB remember the last selection. This requires 54 | # setting 'GRUB_DEFAULT=saved' above. 55 | #GRUB_SAVEDEFAULT="true" 56 | -------------------------------------------------------------------------------- /files/etc/mkinitcpio.conf: -------------------------------------------------------------------------------- 1 | # vim:set ft=sh 2 | # MODULES 3 | # The following modules are loaded before any boot hooks are 4 | # run. Advanced users may wish to specify all system modules 5 | # in this array. For instance: 6 | # MODULES=(piix ide_disk reiserfs) 7 | MODULES=({{#if init_modules}}{{init_modules}}{{/if}}) 8 | 9 | 10 | # BINARIES 11 | # This setting includes any additional binaries a given user may 12 | # wish into the CPIO image. This is run last, so it may be used to 13 | # override the actual binaries included by a given hook 14 | # BINARIES are dependency parsed, so you may safely ignore libraries 15 | BINARIES=({{#if init_binaries}}{{init_binaries}}{{/if}}) 16 | 17 | # FILES 18 | # This setting is similar to BINARIES above, however, files are added 19 | # as-is and are not parsed in any way. This is useful for config files. 20 | FILES=({{#if init_files}}{{init_files}}{{/if}}) 21 | 22 | # HOOKS 23 | # This is the most important setting in this file. The HOOKS control the 24 | # modules and scripts added to the image, and what happens at boot time. 25 | # Order is important, and it is recommended that you do not change the 26 | # order in which HOOKS are added. Run 'mkinitcpio -H ' for 27 | # help on a given hook. 28 | # 'base' is _required_ unless you know precisely what you are doing. 29 | # 'udev' is _required_ in order to automatically load modules 30 | # 'filesystems' is _required_ unless you specify your fs modules in MODULES 31 | # Examples: 32 | ## This setup specifies all modules in the MODULES setting above. 33 | ## No raid, lvm2, or encrypted root is needed. 34 | # HOOKS=(base) 35 | # 36 | ## This setup will autodetect all modules for your system and should 37 | ## work as a sane default 38 | # HOOKS=(base udev autodetect block filesystems) 39 | # 40 | ## This setup will generate a 'full' image which supports most systems. 41 | ## No autodetection is done. 42 | # HOOKS=(base udev block filesystems) 43 | # 44 | ## This setup assembles a pata mdadm array with an encrypted root FS. 45 | ## Note: See 'mkinitcpio -H mdadm' for more information on raid devices. 46 | # HOOKS=(base udev block mdadm encrypt filesystems) 47 | # 48 | ## This setup loads an lvm2 volume group on a usb device. 49 | # HOOKS=(base udev block lvm2 filesystems) 50 | # 51 | ## NOTE: If you have /usr on a separate partition, you MUST include the 52 | # usr, fsck and shutdown hooks. 53 | HOOKS=({{#if init_hooks}}{{init_hooks}}{{/if}}) 54 | 55 | # COMPRESSION 56 | # Use this to compress the initramfs image. By default, gzip compression 57 | # is used. Use 'cat' to create an uncompressed image. 58 | #COMPRESSION="gzip" 59 | #COMPRESSION="bzip2" 60 | #COMPRESSION="lzma" 61 | #COMPRESSION="xz" 62 | #COMPRESSION="lzop" 63 | #COMPRESSION="lz4" 64 | 65 | # COMPRESSION_OPTIONS 66 | # Additional options for the compressor 67 | #COMPRESSION_OPTIONS=() 68 | -------------------------------------------------------------------------------- /files/etc/plymouth.conf: -------------------------------------------------------------------------------- 1 | # Set your plymouth configuration here. 2 | [Daemon] 3 | Theme=dotLock 4 | ShowDelay=0 5 | # DeviceTimeout=8 6 | -------------------------------------------------------------------------------- /files/etc/profile: -------------------------------------------------------------------------------- 1 | # /etc/profile 2 | 3 | # Set our umask 4 | umask 022 5 | 6 | # Append our default paths 7 | appendpath () { 8 | case ":$PATH:" in 9 | *:"$1":*) 10 | ;; 11 | *) 12 | PATH="${PATH:+$PATH:}$1" 13 | esac 14 | } 15 | 16 | appendpath '/usr/local/sbin' 17 | appendpath '/usr/local/bin' 18 | appendpath '/usr/bin' 19 | unset -f appendpath 20 | 21 | export PATH 22 | 23 | # Load profiles from /etc/profile.d 24 | if test -d /etc/profile.d/; then 25 | for profile in /etc/profile.d/*.sh; do 26 | test -r "$profile" && . "$profile" 27 | done 28 | unset profile 29 | fi 30 | 31 | # Source global bash config, when interactive but not posix or sh mode 32 | if test "$BASH" &&\ 33 | test "$PS1" &&\ 34 | test -z "$POSIXLY_CORRECT" &&\ 35 | test "${0#-}" != sh &&\ 36 | test -r /etc/bash.bashrc 37 | then 38 | . /etc/bash.bashrc 39 | fi 40 | 41 | # Termcap is outdated, old, and crusty, kill it. 42 | unset TERMCAP 43 | 44 | # Man is much better than us at figuring this out 45 | unset MANPATH 46 | 47 | # Make anki usable 48 | export ANKI_NOHIGHDPI=1 49 | export ANKI_WAYLAND=1 50 | 51 | # Make Calibre use dark mode 52 | export CALIBRE_USE_DARK_PALETTE=1 53 | 54 | # Make firefox use wayland 55 | export MOZ_ENABLE_WAYLAND=1 56 | 57 | source ~/.config/shrc 58 | 59 | # If no tmux sessions are running and we're connected over ssh, start tmux 60 | if [[ $(who am i) =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then 61 | if [[ -z $(pgrep tmux) ]]; then 62 | export TERM="xterm-256color" 63 | /usr/bin/tmux 64 | fi 65 | fi 66 | -------------------------------------------------------------------------------- /files/etc/sudoers.d/suspend: -------------------------------------------------------------------------------- 1 | b3nj4m1n ALL= NOPASSWD: /usr/bin/systemctl suspend 2 | b3nj4m1n ALL= NOPASSWD: /usr/bin/systemctl hibernate 3 | -------------------------------------------------------------------------------- /files/firefox/user.js: -------------------------------------------------------------------------------- 1 | user_pref("app.normandy.startupRolloutPrefs.network.preload", true); 2 | user_pref("app.normandy.startupRolloutPrefs.pdfjs.renderInteractiveForms", true); 3 | user_pref("app.normandy.startupRolloutPrefs.print.tab_modal.enabled", true); 4 | user_pref("app.normandy.startupRolloutPrefs.security.bad_cert_domain_error.url_fix_enabled", true); 5 | user_pref("browser.bookmarks.defaultLocation", "unfiled"); 6 | user_pref("browser.download.useDownloadDir", false); 7 | user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false); 8 | user_pref("browser.newtabpage.activity-stream.feeds.topsites", false); 9 | user_pref("browser.search.region", "EN"); 10 | user_pref("browser.tabs.warnOnClose", false); 11 | user_pref("browser.toolbars.bookmarks.visibility", "always"); 12 | user_pref("devtools.toolbox.selectedTool", "webconsole"); 13 | user_pref("devtools.toolbox.splitconsoleEnabled", true); 14 | user_pref("devtools.webconsole.input.editor", true); 15 | user_pref("dom.event.clipboardevents.enabled", false); 16 | user_pref("extensions.activeThemeID", "firefox-compact-dark@mozilla.org"); 17 | user_pref("general.smoothScroll.mouseWheel.migrationPercent", 0); 18 | user_pref("geo.enabled", false); 19 | user_pref("media.navigator.enabled", false); 20 | user_pref("media.peerconnection.enabled", false); 21 | user_pref("network.dns.disablePrefetch", true); 22 | user_pref("network.predictor.enabled", false); 23 | user_pref("network.prefetch-next", false); 24 | user_pref("privacy.resistFingerprinting", true); 25 | user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); 26 | user_pref("webgl.disabled", true); 27 | -------------------------------------------------------------------------------- /files/firefox/userChrome.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-dark: rgb(70, 70, 70); 3 | --color-light: rgb(255, 255, 255); 4 | --gay-gradient: linear-gradient(90deg, rgba(255,0,24,1) 0%, rgba(255,165,44,1) 20%, rgba(255,255,65,1) 40%, rgba(0,128,24,1) 60%, rgba(0,0,249,1) 80%, rgba(134,0,125,1) 100%); 5 | --dracula-gradient: linear-gradient(270deg, #50fa7b, #ffb86c, #ff79c6, #bd93f9, #ff5555, #f1fa8c, #8be9fd); 6 | } 7 | 8 | #urlbar-input::selection { 9 | background: #bd93f9; 10 | } 11 | 12 | #urlbar:not(.hidden-focus)[focused="true"] > #urlbar-input-container { 13 | background: var(--dracula-gradient); 14 | background-size: 1200% 1200%; 15 | 16 | animation: gradient-scroll 9s linear infinite; 17 | } 18 | 19 | #urlbar { 20 | /* --urlbar-separator-color: #ff0066; */ 21 | } 22 | 23 | /* Don't display tabline when tab is not selected */ 24 | .tabbrowser-tab:not([selected]) .tab-line { 25 | display: none !important; 26 | } 27 | /* Set tabline color to green for selected tab */ 28 | .tab-line[selected="true"] { 29 | background-color: #50fa7b !important; 30 | } 31 | 32 | /* When hovering over the selected tab, set the background to an animated gradient */ 33 | .tabbrowser-tab:hover .tab-line { 34 | background: var(--dracula-gradient); 35 | background-size: 1400% 1400%; 36 | 37 | animation: gradient-scroll 7s ease infinite; 38 | } 39 | 40 | @-webkit-keyframes gradient-scroll { 41 | 0%{background-position:0% 50%} 42 | 50%{background-position:100% 50%} 43 | 100%{background-position:0% 50%} 44 | } 45 | @-moz-keyframes gradient-scroll { 46 | 0%{background-position:0% 50%} 47 | 50%{background-position:100% 50%} 48 | 100%{background-position:0% 50%} 49 | } 50 | @keyframes gradient-scroll { 51 | 0%{background-position:0% 50%} 52 | 50%{background-position:100% 50%} 53 | 100%{background-position:0% 50%} 54 | } 55 | -------------------------------------------------------------------------------- /files/firefox/userContent.css: -------------------------------------------------------------------------------- 1 | /* @-moz-document url(about:blank), url(about:newtab), url(about:home) { */ 2 | /* html:not(#ublock0-epicker), html:not(#ublock0-epicker) body, #newtab-customize-overlay { */ 3 | /* background: #2F343F !important; */ 4 | /* } */ 5 | /* } */ 6 | -------------------------------------------------------------------------------- /files/fish/config.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/fish 2 | 3 | fish_vi_key_bindings 4 | function fish_mode_prompt 5 | end 6 | function fish_greeting 7 | end 8 | 9 | # Start ssh agent 10 | export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock 11 | # test whether $SSH_AUTH_SOCK is valid 12 | ssh-add -l 2>/dev/null >/dev/null 13 | # if not valid, then start ssh-agent using $SSH_AUTH_SOCK 14 | [ $status -ge 2 ] && rm -f "$SSH_AUTH_SOCK" && ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null 15 | # eval `ssh-agent -a $SSH_AUTH_SOCK` &>/dev/null 16 | 17 | # Use starship prompt 18 | starship init fish | source 19 | # Init zoxide (Better navigation than with cd) 20 | zoxide init fish | source 21 | # Init atuin (Better Ctrl + r) 22 | atuin init fish | source 23 | # Init direnv 24 | direnv hook fish | source 25 | # Source common aliases, exports, etc. 26 | # source ~/.config/shrc 27 | -------------------------------------------------------------------------------- /files/fontconfig/fonts.conf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | monospace 6 | 7 | {{ font.font }} 8 | Code2001 9 | 10 | 11 | 12 | serif 13 | 14 | {{ font.font }} 15 | Code2001 16 | 17 | 18 | 19 | sans-serif 20 | 21 | {{ font.font }} 22 | Code2001 23 | 24 | 25 | 26 | sans 27 | 28 | {{ font.font }} 29 | Code2001 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /files/games/thewitcher/controls.txt: -------------------------------------------------------------------------------- 1 | ATTACK LIGHT SQUARE 2 | ATTACK HEAVY TRIANGLE 3 | 4 | DODGE CIRCLE 5 | ROLL RT 6 | PARRY 7 | 8 | SPRINT RT 9 | 10 | SECONDARY WEAPON RIGHT THUMB 11 | 12 | --- Modifier: RB (Needs https://www.nexusmods.com/witcher3/mods/4489?tab=description) 13 | AARD SQUARE 14 | YRDEN LB 15 | AXII TRIANGLE 16 | QUEN CROSS 17 | IGNI CIRCLE 18 | 19 | BESTIARY LEFT 20 | ALCHEMY DOWN 21 | INVENTORY HOLD START 22 | MAP START 23 | QUESTS UP 24 | CHARACTER RIGHT 25 | MEDITATION 26 | 27 | GWENT HOLD BACK 28 | 29 | QSAVE 30 | -------------------------------------------------------------------------------- /files/gtk/gtkrc-2.0: -------------------------------------------------------------------------------- 1 | gtk-theme-name="Dracula" 2 | gtk-icon-theme-name="Papirus-Dark" 3 | gtk-font-name="{{ font.font }}, {{ font.font_size }}" 4 | gtk-cursor-theme-name="Breeze_Snow" 5 | gtk-cursor-theme-size=0 6 | gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ 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 | -------------------------------------------------------------------------------- /files/gtk/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-application-prefer-dark-theme=1 3 | gtk-button-images=1 4 | gtk-cursor-theme-name=Breeze_Snow 5 | gtk-decoration-layout=:minimize,maximize,close 6 | gtk-enable-animations=1 7 | gtk-font-name={{ font.font }}, {{ font.font_size }} 8 | gtk-icon-theme-name=Papirus-Dark 9 | gtk-menu-images=1 10 | gtk-primary-button-warps-slider=0 11 | gtk-theme-name=Dracula 12 | gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ 13 | gtk-cursor-theme-size=0 14 | gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR 15 | gtk-enable-event-sounds=1 16 | gtk-enable-input-feedback-sounds=1 17 | gtk-xft-antialias=1 18 | gtk-xft-hinting=1 19 | gtk-xft-hintstyle=hintfull 20 | -------------------------------------------------------------------------------- /files/lightdm/Xsession: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # LightDM wrapper to run around X sessions. 4 | 5 | echo "Running X session wrapper" 6 | 7 | # Load profile 8 | for file in "/etc/profile" "$HOME/.profile" "/etc/xprofile" "$HOME/.xprofile"; do 9 | if [ -f "$file" ]; then 10 | echo "Loading profile from $file"; 11 | . "$file" 12 | fi 13 | done 14 | 15 | # Load resources 16 | for file in "/etc/X11/Xresources" "$HOME/.Xresources"; do 17 | if [ -f "$file" ]; then 18 | echo "Loading resource: $file" 19 | xrdb -load "$XDG_CONFIG_HOME/X11/xresources" -merge "$file" 20 | fi 21 | done 22 | 23 | # Load keymaps 24 | for file in "/etc/X11/Xkbmap" "$HOME/.Xkbmap"; do 25 | if [ -f "$file" ]; then 26 | echo "Loading keymap: $file" 27 | setxkbmap `cat "$file"` 28 | XKB_IN_USE=yes 29 | fi 30 | done 31 | 32 | # Load xmodmap if not using XKB 33 | if [ -z "$XKB_IN_USE" ]; then 34 | for file in "/etc/X11/Xmodmap" "$HOME/.Xmodmap"; do 35 | if [ -f "$file" ]; then 36 | echo "Loading modmap: $file" 37 | xmodmap "$file" 38 | fi 39 | done 40 | fi 41 | 42 | unset XKB_IN_USE 43 | 44 | # Run all system xinitrc shell scripts 45 | xinitdir="/etc/X11/xinit/xinitrc.d" 46 | if [ -d "$xinitdir" ]; then 47 | for script in $xinitdir/*; do 48 | echo "Loading xinit script $script" 49 | if [ -x "$script" -a ! -d "$script" ]; then 50 | . "$script" 51 | fi 52 | done 53 | fi 54 | 55 | # Run user xsession shell script 56 | script="$HOME/.xsession" 57 | if [ -x "$script" -a ! -d "$script" ]; then 58 | echo "Loading xsession script $script" 59 | . "$script" 60 | fi 61 | 62 | echo "X session wrapper complete, running session $@" 63 | 64 | exec $@ 65 | -------------------------------------------------------------------------------- /files/lightdm/lightdm-webkit2-greeter.conf: -------------------------------------------------------------------------------- 1 | # 2 | # [greeter] 3 | # debug_mode = Greeter theme debug mode. 4 | # detect_theme_errors = Provide an option to load a fallback theme when theme errors are detected. 5 | # screensaver_timeout = Blank the screen after this many seconds of inactivity. 6 | # secure_mode = Don't allow themes to make remote http requests. 7 | # time_format = A moment.js format string so the greeter can generate localized time for display. 8 | # time_language = Language to use when displaying the time or "auto" to use the system's language. 9 | # webkit_theme = Webkit theme to use. 10 | # 11 | # NOTE: See moment.js documentation for format string options: http://momentjs.com/docs/#/displaying/format/ 12 | # 13 | 14 | [greeter] 15 | debug_mode = true 16 | detect_theme_errors = true 17 | screensaver_timeout = 300 18 | secure_mode = true 19 | time_format = LT 20 | time_language = auto 21 | webkit_theme = glorious 22 | 23 | # 24 | # [branding] 25 | # background_images = Path to directory that contains background images for use by themes. 26 | # logo = Path to logo image for use by greeter themes. 27 | # user_image = Default user image/avatar. This is used by themes for users that have no .face image. 28 | # 29 | # NOTE: Paths must be accessible to the lightdm system user account (so they cannot be anywhere in /home) 30 | # 31 | 32 | [branding] 33 | background_images = /usr/share/wallpapers/custom/ 34 | logo = /usr/share/pixmaps/archlinux-logo.svg 35 | user_image = /usr/share/pixmaps/archlinux-user.svg 36 | -------------------------------------------------------------------------------- /files/lisp/init.lisp: -------------------------------------------------------------------------------- 1 | ;;;; Common Lisp REPL config 2 | 3 | 4 | ;;; Add the current directory to the central registry of asdf, meaning 5 | ;;; you can load the project from the current directory 6 | (pushnew "./" asdf:*central-registry* :test #'equal) 7 | 8 | ;;; Load quicklisp 9 | (load "\~/.local/share/roswell/lisp/quicklisp/setup.lisp") 10 | -------------------------------------------------------------------------------- /files/map2/devices.list: -------------------------------------------------------------------------------- 1 | /dev/input/by-id/usb-Razer_Razer_BlackWidow_Elite-event-kbd 2 | -------------------------------------------------------------------------------- /files/map2/test.m2: -------------------------------------------------------------------------------- 1 | !^h::KEY_LEFT; 2 | !^j::KEY_DOWN; 3 | !^k::KEY_UP; 4 | !^l::KEY_RIGHT; 5 | -------------------------------------------------------------------------------- /files/mutt/.mbsyncrc: -------------------------------------------------------------------------------- 1 | IMAPStore username1@email.com-remote 2 | Host imap.email.net 3 | Port 993 4 | User username1@email.com 5 | PassCmd "pass username1@email.com" 6 | AuthMechs LOGIN 7 | SSLType IMAPS 8 | CertificateFile /etc/ssl/certs/ca-certificates.crt 9 | 10 | MaildirStore username1@email.com-local 11 | Subfolders Verbatim 12 | Path ~/.local/share/mail/username1@email.com/ 13 | Inbox ~/.local/share/mail/username1@email.com/INBOX 14 | Flatten . 15 | 16 | Channel username1@email.com 17 | Expunge Both 18 | Master :username1@email.com-remote: 19 | Slave :username1@email.com-local: 20 | Patterns * !"[Gmail]/All Mail" 21 | Create Both 22 | SyncState * 23 | MaxMessages 0 24 | ExpireUnread no 25 | # End profile 26 | 27 | 28 | IMAPStore username2@email.com-remote 29 | Host imap.email.net 30 | Port 993 31 | User username2@email.com 32 | PassCmd "pass username2@email.com" 33 | AuthMechs LOGIN 34 | SSLType IMAPS 35 | CertificateFile /etc/ssl/certs/ca-certificates.crt 36 | 37 | MaildirStore username2@email.com-local 38 | Subfolders Verbatim 39 | Path ~/.local/share/mail/username2@email.com/ 40 | Inbox ~/.local/share/mail/username2@email.com/INBOX 41 | Flatten . 42 | 43 | Channel username2@email.com 44 | Expunge Both 45 | Master :username2@email.com-remote: 46 | Slave :username2@email.com-local: 47 | Patterns * !"[Gmail]/All Mail" 48 | Create Both 49 | SyncState * 50 | MaxMessages 0 51 | ExpireUnread no 52 | # End profile 53 | -------------------------------------------------------------------------------- /files/mutt/README.md: -------------------------------------------------------------------------------- 1 | # (Neo) Mutt 2 | 3 | This is not the full config, since that contains sensitive information. A lot of this was originally generated by mutt wizard. 4 | -------------------------------------------------------------------------------- /files/mutt/accounts/username1@email.com.muttrc: -------------------------------------------------------------------------------- 1 | # vim: filetype=neomuttrc 2 | # muttrc file for account benjamin-von-papen 3 | set realname = "Benjamin" 4 | set from = "username1@email.com" 5 | set sendmail = "msmtp -a username1@email.com" 6 | alias me Benjamin 7 | set folder = "/home/b3nj4m1n/.local/share/mail/username1@email.com" 8 | set header_cache = /home/b3nj4m1n/.cache/mutt/username1@email.com/headers 9 | set message_cachedir = /home/b3nj4m1n/.cache/mutt/username1@email.com/bodies 10 | set mbox_type = Maildir 11 | 12 | # set crypt_autosign = yes 13 | # set crypt_opportunistic_encrypt = yes 14 | # set pgp_self_encrypt = yes 15 | # set pgp_default_key = 16 | 17 | bind index,pager gg noop 18 | bind index,pager g noop 19 | bind index,pager M noop 20 | bind index,pager C noop 21 | bind index gg first-entry 22 | macro index o "mailsync -V username1@email.com" "run mbsync to sync username1@email.com" 23 | unmailboxes * 24 | 25 | set spoolfile = "+INBOX" 26 | set record = "" 27 | set postponed = "" 28 | set trash = "" 29 | 30 | mailboxes `find /home/b3nj4m1n/.local/share/mail/username1@email.com/ -maxdepth 1 -printf '%P\n' | cut -d$'\n' -f2- | awk '{print "\"=" $0 "\" "}' | sort | tr -d "\n"; printf "\n"` 31 | 32 | macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated 33 | macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated 34 | macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated 35 | macro index,pager gS "=Spamverdacht" "go to spam" # mw-autogenerated 36 | macro index,pager MS ";=Spamverdacht" "move mail to spam" # mw-autogenerated 37 | macro index,pager CS ";=Spamverdacht" "copy mail to spam" # mw-autogenerated 38 | -------------------------------------------------------------------------------- /files/mutt/accounts/username2@email.com.muttrc: -------------------------------------------------------------------------------- 1 | # vim: filetype=neomuttrc 2 | # muttrc file for account b3nj4m1n 3 | set realname = "Benjamin" 4 | set from = "username2@email.com" 5 | set sendmail = "msmtp -a username2@email.com" 6 | alias me Benjamin 7 | set folder = "/home/b3nj4m1n/.local/share/mail/username2@email.com" 8 | set header_cache = /home/b3nj4m1n/.cache/mutt/username2@email.com/headers 9 | set message_cachedir = /home/b3nj4m1n/.cache/mutt/username2@email.com/bodies 10 | set mbox_type = Maildir 11 | 12 | bind index,pager gg noop 13 | bind index,pager g noop 14 | bind index,pager M noop 15 | bind index,pager C noop 16 | bind index gg first-entry 17 | macro index o "mailsync -V username2@email.com" "run mbsync to sync username2@email.com" 18 | unmailboxes * 19 | 20 | set spoolfile = "+INBOX" 21 | set record = "" 22 | set postponed = "" 23 | set trash = "" 24 | 25 | mailboxes `find /home/b3nj4m1n/.local/share/mail/username2@email.com/ -maxdepth 1 -printf '%P\n' | cut -d$'\n' -f2- | awk '{print "\"=" $0 "\" "}' | sort | tr -d "\n"; printf "\n"` 26 | 27 | macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated 28 | macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated 29 | macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated 30 | macro index,pager gS "=Spamverdacht" "go to spam" # mw-autogenerated 31 | macro index,pager MS ";=Spamverdacht" "move mail to spam" # mw-autogenerated 32 | macro index,pager CS ";=Spamverdacht" "copy mail to spam" # mw-autogenerated 33 | -------------------------------------------------------------------------------- /files/mutt/muttrc: -------------------------------------------------------------------------------- 1 | # vim: filetype=neomuttrc 2 | source ./settings.muttrc 3 | source ./accounts/username1@email.com.muttrc 4 | macro index,pager i1 'source /home/b3nj4m1n/.config/mutt/accounts/username1@email.com.muttrc!;' "switch to username1@email.com" 5 | macro index,pager i2 'source /home/b3nj4m1n/.config/mutt/accounts/username2@email.com.muttrc!;' "switch to username2@email.com" 6 | -------------------------------------------------------------------------------- /files/ncmpcpp/bindings: -------------------------------------------------------------------------------- 1 | # Credit: https://github.com/elenapan/dotfiles 2 | 3 | ########################################################## 4 | ## this is example bindings configuration file, copy it ## 5 | ## to ~/.ncmpcpp/bindings and set up your preferences ## 6 | ########################################################## 7 | 8 | def_key "9" 9 | show_help 10 | 11 | # Delete 12 | def_key "D" 13 | delete_playlist_items 14 | def_key "D" 15 | delete_browser_items 16 | def_key "D" 17 | delete_stored_playlist 18 | 19 | # Scrolling 20 | def_key "k" 21 | scroll_up 22 | def_key "K" 23 | select_item 24 | scroll_up 25 | def_key "j" 26 | scroll_down 27 | def_key "J" 28 | select_item 29 | scroll_down 30 | def_key "ctrl-u" 31 | page_up 32 | def_key "ctrl-d" 33 | page_down 34 | def_key "g" 35 | move_home 36 | def_key "G" 37 | move_end 38 | 39 | 40 | # Search 41 | def_key "n" 42 | next_found_item 43 | def_key "N" 44 | previous_found_item 45 | 46 | -------------------------------------------------------------------------------- /files/ncmpcpp/config: -------------------------------------------------------------------------------- 1 | # Credit: https://github.com/elenapan/dotfiles 2 | 3 | ### Directories ### 4 | ncmpcpp_directory = ~/.config/ncmpcpp 5 | lyrics_directory = ~/.local/share/lyrics 6 | mpd_music_dir = /mnt/Vault/music/ 7 | 8 | ### Behaviour ### 9 | # execute_on_song_change = "bash ~/.config/ncmpcpp/mpd-notification" 10 | message_delay_time = 1 11 | autocenter_mode = "yes" 12 | centered_cursor = "yes" 13 | ignore_leading_the = "yes" 14 | allow_for_physical_item_deletion = "no" 15 | 16 | ### Visualizer ### 17 | # visualizer_fifo_path = /tmp/mpd.fifo 18 | # visualizer_output_name = "mpd_visualizer" 19 | # visualizer_in_stereo = "yes" 20 | # visualizer_sample_multiplier = 2 21 | # visualizer_sync_interval = 30 22 | 23 | ### Appearance ### 24 | colors_enabled = "yes" 25 | playlist_display_mode = "columns" 26 | browser_display_mode = "columns" 27 | 28 | # Window # 29 | song_window_title_format = "mpd » {%a - }{%t}|{%f}" 30 | statusbar_visibility = "yes" 31 | header_visibility = "no" 32 | titles_visibility = "no" 33 | 34 | # Progress bar # 35 | #progressbar_look = "⠒⠒⠐" 36 | #progressbar_look = "•••" 37 | #progressbar_look = "---" 38 | #progressbar_look = "▀▀ " 39 | #progressbar_look = "╼·" 40 | progressbar_look = "━━━" 41 | #progressbar_look = "━━─" 42 | #progressbar_look = "◾◾◽" 43 | #progressbar_look = "─╼─" 44 | 45 | color1 = magenta 46 | color2 = cyan 47 | user_interface = alternative 48 | alternative_header_first_line_format = {$6$b%a$9} {$7%t$6} 49 | alternative_header_second_line_format = {$7%b$9} {$6(%y)$9} 50 | alternative_ui_separator_color = 7 51 | header_window_color = magenta 52 | display_volume_level = yes 53 | statusbar_color = magenta 54 | current_item_prefix = $(3)$b 55 | current_item_suffix = $/b 56 | selected_item_prefix = $(white_magenta)$b 57 | selected_item_suffix = $/b$(end) 58 | browser_playlist_prefix = "$3Playlist$3" 59 | progressbar_color = "black" 60 | progressbar_elapsed_color = "magenta" 61 | now_playing_prefix = "$b" 62 | now_playing_suffix = "$/b" 63 | song_status_format = "$b$6%t$/b {$2by} $b$6%a$8$/b" 64 | song_list_format = $(magenta){%a}$(end) $(cyan){%t}$(end) $R $(magenta){%b}$(end) $(cyan)({%l})$(end) 65 | statusbar_time_color = "magenta" 66 | player_state_color = "cyan" 67 | volume_color = "cyan" 68 | state_flags_color = "magenta" 69 | song_columns_list_format = "(15)[white]{lr}(1)[white]{}(40)[magenta]{a}(40)[cyan]{t}" 70 | empty_tag_color = magenta 71 | discard_colors_if_item_is_selected = yes 72 | main_window_color = "magenta" 73 | state_line_color = "blue" 74 | -------------------------------------------------------------------------------- /files/npm/npmrc: -------------------------------------------------------------------------------- 1 | prefix=${XDG_DATA_HOME}/npm 2 | cache=${XDG_CACHE_HOME}/npm 3 | tmp=${XDG_RUNTIME_DIR}/npm 4 | init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js 5 | -------------------------------------------------------------------------------- /files/nvim/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /files/nvim/Makefile: -------------------------------------------------------------------------------- 1 | SOURCE_FILE="./config.norg" 2 | QUERY_FILE="./build/query.scm" 3 | FENNEL_FILE="./build/config.fnl" 4 | # FENNEL_FILE="./config.fnl" 5 | LUA_FILE="./build/config.lua" 6 | INSTALL_DIR="$(XDG_CONFIG_HOME)/nvim/lua" 7 | INSTALL_FILE="$(INSTALL_DIR)/config.lua" 8 | INIT_FILE="./init.lua" 9 | PACKER_DIR="$(XDG_DATA_HOME)/nvim/site/pack/packer/start/packer.nvim" 10 | 11 | all: packer build_dir query extract compile install init update 12 | 13 | build_dir: 14 | mkdir -p ./build 15 | 16 | query: build_dir 17 | echo "(ranged_tag (tag_name) @name (ranged_tag_content) @code (#eq? @name \"code\"))" > $(QUERY_FILE) 18 | 19 | extract: query 20 | bash ./extract.sh 21 | # tree-sitter query --captures $(QUERY_FILE) $(SOURCE_FILE) | /usr/bin/env sed "s/ pattern:\s*\w*, capture:\s*\w*\s*-\s*name, start:\s*(\w*,\s*\w*),\s*end:\s(\w*,\s*\w*),\s*text:\s\`code\`//" | /usr/bin/env sed "s/ pattern:\s*\w*, capture:\s*\w*\s*-\s*code, start:\s*(\w*,\s*\w*),\s*end:\s(\w*,\s*\w*),\s*text:\s/---\n/" | awk '{ if (NR!=1) { print substr($$0, 3, length($$0)-5) } }' RS="---" > $(FENNEL_FILE) 22 | 23 | compile: extract 24 | fennel --compile $(FENNEL_FILE) > $(LUA_FILE) 25 | 26 | install: compile 27 | mkdir -p $(INSTALL_DIR) 28 | cp $(LUA_FILE) $(INSTALL_FILE) 29 | 30 | init: 31 | echo "require('config')" > $(INIT_FILE) 32 | 33 | update: 34 | nvim --headless +PackerCompile +qa 35 | 36 | clean: 37 | rm -rf build 38 | 39 | packer: 40 | if [ ! -d $(PACKER_DIR) ]; then git clone --depth 1 https://github.com/wbthomason/packer.nvim $(PACKER_DIR); fi 41 | 42 | .PHONY: build_dir query clean 43 | 44 | -------------------------------------------------------------------------------- /files/nvim/after/queries/lua/textobjects.scm: -------------------------------------------------------------------------------- 1 | ; ;; functions 2 | ; (function 3 | ; (function_name) 4 | ; (parameters) 5 | ; (_) @function.inner 6 | ; ) @function.outer 7 | -------------------------------------------------------------------------------- /files/nvim/after/queries/markdown/highlights.scm: -------------------------------------------------------------------------------- 1 | ; ((atx_heading 2 | ; (atx_h1_marker) @_h1 3 | ; (_) @h1)) 4 | ; ((atx_heading 5 | ; (atx_h2_marker) @_h2 6 | ; (_) @h2)) 7 | ; ((atx_heading 8 | ; (atx_h3_marker) @_h3 9 | ; (_) @h3)) 10 | ; ((atx_heading 11 | ; (atx_h4_marker) @_h4 12 | ; (_) @h4)) 13 | ; ((atx_heading 14 | ; (atx_h5_marker) @_h5 15 | ; (_) @h5)) 16 | 17 | ; (emphasis) @emphasis 18 | ; (strong_emphasis) @strong_emphasis 19 | ; (strikethrough) @strikethrough 20 | ; (info_string) @info_string 21 | -------------------------------------------------------------------------------- /files/nvim/after/syntax/markdown.vim: -------------------------------------------------------------------------------- 1 | highlight h1 guifg=#50fa7b gui=bold 2 | highlight _h1 guifg=#50fa7b gui=nocombine 3 | highlight h2 guifg=#ff79c6 gui=bold 4 | highlight _h2 guifg=#ff79c6 gui=nocombine 5 | highlight h3 guifg=#ffb86c gui=bold 6 | highlight _h3 guifg=#ffb86c gui=nocombine 7 | highlight h4 guifg=#8be9fd gui=bold 8 | highlight _h4 guifg=#8be9fd gui=nocombine 9 | highlight h5 guifg=#f1fa8c gui=bold 10 | highlight _h5 guifg=#f1fa8c gui=nocombine 11 | highlight emphasis gui=italic 12 | highlight strong_emphasis gui=bold 13 | highlight strikethrough gui=strikethrough 14 | highlight info_string guifg=#f1fa8c gui=italic 15 | 16 | highlight markdownH1 guifg=#50fa7b gui=bold 17 | highlight markdownH1Delimiter guifg=#50fa7b 18 | highlight markdownH2 guifg=#ff79c6 gui=bold 19 | highlight markdownH2Delimiter guifg=#ff79c6 20 | highlight markdownH3 guifg=#ffb86c gui=bold 21 | highlight markdownH3Delimiter guifg=#ffb86c 22 | highlight markdownH4 guifg=#8be9fd gui=bold 23 | highlight markdownH4Delimiter guifg=#8be9fd 24 | highlight markdownH5 guifg=#ff5555 gui=bold 25 | highlight markdownH5Delimiter guifg=#ff5555 26 | -------------------------------------------------------------------------------- /files/nvim/bootstrap.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | plugin_dir="/home/$USER/.local/share/nvim/site/pack/packer/start" 4 | 5 | packer_dir="$plugin_dir/packer.nvim" 6 | if [ -d "$packer_dir" ]; then 7 | echo "Packer seems to be installed, skipping." 8 | else 9 | echo "Installing packer..." 10 | git clone https://github.com/wbthomason/packer.nvim "$packer_dir" 11 | fi 12 | 13 | aniseed_dir="$plugin_dir/aniseed" 14 | if [ -d "$aniseed_dir" ]; then 15 | echo "Aniseed seems to be installed, skipping." 16 | else 17 | echo "Installing aniseed..." 18 | git clone https://github.com/Olical/aniseed "$aniseed_dir" 19 | fi 20 | -------------------------------------------------------------------------------- /files/nvim/fnl/init.fnl: -------------------------------------------------------------------------------- 1 | 2 | (module fennel-config 3 | { 4 | require 5 | { 6 | util util 7 | paq paq}}) 8 | 9 | (def util (require "util")) 10 | (def options (require "options")) 11 | (def highlight (require "highlight")) 12 | (highlight.create-groups-indent-blankline) 13 | 14 | (def lsp-util (require "lsp-util")) 15 | 16 | (def plugins (require "plugins")) 17 | 18 | (paq.init-lazy) 19 | 20 | (def keymaps (require "keymaps")) 21 | 22 | (def feline-config (require "feline-config")) 23 | 24 | (def plugin-config (require "plugin-config")) 25 | 26 | 27 | (plugin-config.colorscheme) 28 | (plugin-config.watch-mode-changes) 29 | (plugin-config.kommentary) 30 | (plugin-config.dressing) 31 | ; (plugin-config.neorg) 32 | (plugin-config.lspconfig) 33 | 34 | ; (plugin-config.indent-blankline) 35 | (plugin-config.leap) 36 | ; (plugin-config.autopairs) 37 | (plugin-config.nvim-surround) 38 | (plugin-config.nvim-colorizer) 39 | (plugin-config.nvim-treesitter) 40 | ; (plugin-config.lspconfig) 41 | ; (plugin-config.lspsaga) 42 | ; (plugin-config.lsp-lines) 43 | (plugin-config.trouble) 44 | ; (plugin-config.nvim-cmp) 45 | (plugin-config.luasnip) 46 | ; (plugin-config.neogit) 47 | (plugin-config.gitsigns) 48 | (plugin-config.conjure) 49 | (plugin-config.netrw) 50 | ; (plugin-config.murmur) 51 | (plugin-config.ufo) 52 | (plugin-config.dap) 53 | 54 | 55 | (highlight.create-groups-telescope "normal") 56 | (highlight.create-groups-ufo "normal") 57 | (highlight.create-groups-cmp) 58 | (highlight.create-groups-cursorword) 59 | 60 | -------------------------------------------------------------------------------- /files/nvim/fnl/lsp-util.fnl: -------------------------------------------------------------------------------- 1 | (module lsp-util 2 | {require 3 | {util util}}) 4 | 5 | (defn get-capabilities [] 6 | (var capabilities {}) 7 | ; (set capabilities ((. (require :cmp_nvim_lsp) :default_capabilities))) 8 | (set capabilities ((. (require :blink.cmp) :get_lsp_capabilities) config.capabilities)) 9 | (tset (. capabilities :textDocument) :foldingRange 10 | {:dynamicRegistration false 11 | :lineFoldingOnly true})) 12 | 13 | (defn get-handlers [] 14 | { 15 | "textDocument/hover" (vim.lsp.with vim.lsp.handlers.hover {:border "single"}) 16 | "textDocument/signatureHelp" (vim.lsp.with vim.lsp.handlers.signature_help {:border "single"})}) 17 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/c.lua: -------------------------------------------------------------------------------- 1 | vim.bo["expandtab"] = true 2 | vim.bo["tabstop"] = 2 3 | vim.bo["shiftwidth"] = 2 4 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/cpp.lua: -------------------------------------------------------------------------------- 1 | vim.bo["expandtab"] = true 2 | vim.bo["tabstop"] = 4 3 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/java.lua: -------------------------------------------------------------------------------- 1 | local Path = require "plenary.path" 2 | local root_dir = vim.fs.dirname(vim.fs.find({'.gradlew', '.git', 'mvnw'}, { upward = true })[1]) 3 | 4 | local project_name = vim.fn.fnamemodify(dir_root, ':p:h:t') 5 | 6 | local workspace_dir = Path:new(os.getenv('XDG_DATA_HOME'), "jdtls_workspaces", project_name) 7 | 8 | --[[ local config = { 9 | cmd = { 10 | 'java', 11 | '-Declipse.application=org.eclipse.jdt.ls.core.id1', 12 | '-Dosgi.bundles.defaultStartLevel=4', 13 | '-Declipse.product=org.eclipse.jdt.ls.core.product', 14 | '-Dlog.protocol=true', 15 | '-Dlog.level=ALL', 16 | '-Xms1g', 17 | '--add-modules=ALL-SYSTEM', 18 | '--add-opens', 'java.base/java.util=ALL-UNNAMED', 19 | '--add-opens', 'java.base/java.lang=ALL-UNNAMED', 20 | '-jar', '/usr/share/java/jdtls/plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar', 21 | '-configuration', '/usr/share/java/jdtls/config_linux', 22 | '-data', tostring(workspace_dir) 23 | }, 24 | 25 | root_dir = tostring(dir_root), 26 | capabilities = require("cmp_nvim_lsp").default_capabilities() 27 | } ]] 28 | 29 | local config = { 30 | cmd = {'jdtls'}, 31 | root_dir = root_dir, 32 | capabilities = require("cmp_nvim_lsp").default_capabilities() 33 | } 34 | 35 | local extendedClientCapabilities = require'jdtls'.extendedClientCapabilities 36 | extendedClientCapabilities.resolveAdditionalTextEditsSupport = true 37 | config.init_options = { 38 | extendedClientCapabilities = extendedClientCapabilities; 39 | } 40 | 41 | 42 | require('jdtls').start_or_attach(config) 43 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/lisp.vim: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3nj5m1n/dotfiles/a65f4ba3865b7106004a087577c90cf286b80efe/files/nvim/ftplugin/lisp.vim -------------------------------------------------------------------------------- /files/nvim/ftplugin/make.lua: -------------------------------------------------------------------------------- 1 | vim.bo["expandtab"] = false 2 | vim.bo["tabstop"] = 4 3 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/markdown.vim: -------------------------------------------------------------------------------- 1 | set wrap 2 | set linebreak 3 | " set spell 4 | 5 | " Compile document (c[ompile] d[ocument]) 6 | " map cd :silent lua compile() 7 | " Open corresponding .pdf/.html or preview (c[ompile] s[how]) 8 | " map cs :!zathura $(echo % \| sed -r 's/\.[^.]+$/.pdf/') & disown 9 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/norg.vim: -------------------------------------------------------------------------------- 1 | set wrap 2 | set linebreak 3 | 4 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/rust.lua: -------------------------------------------------------------------------------- 1 | -- Replaced with lazy.nvim config 2 | 3 | --[[ local opts = { 4 | tools = { 5 | runnables = { 6 | use_telescope = true 7 | }, 8 | executor = require("rust-tools.executors").termopen, 9 | on_initialized = nil, 10 | reload_workspace_from_cargo_toml = true, 11 | inlay_hints = { 12 | auto = false, 13 | only_current_line = false, 14 | show_parameter_hints = true, 15 | parameter_hints_prefix = " <- ", 16 | other_hints_prefix = " => ", 17 | max_len_align = false, 18 | max_len_align_padding = 1, 19 | right_align = false, 20 | right_align_padding = 7, 21 | highlight = "Comment", 22 | }, 23 | hover_actions = { 24 | auto_focus = false, 25 | }, 26 | }, 27 | 28 | server = { 29 | standalone = true, 30 | capabilities = require("fennel-config")["lsp-util"]["get-capabilities"](), 31 | handlers = require("fennel-config")["lsp-util"]["get-handlers"](), 32 | }, 33 | 34 | dap = { 35 | adapter = require('rust-tools.dap').get_codelldb_adapter("/usr/bin/codelldb", "/usr/lib/liblldb.so") 36 | }, 37 | } 38 | 39 | (local opts {:dap {:adapter ((. (require :rust-tools.dap) :get_codelldb_adapter) :/usr/bin/codelldb 40 | :/usr/lib/liblldb.so)} 41 | :server {:capabilities ((. (. (require :fennel-config) :lsp-util) 42 | :get-capabilities)) 43 | :handlers ((. (. (require :fennel-config) :lsp-util) 44 | :get-handlers)) 45 | :standalone true} 46 | :tools {:executor (. (require :rust-tools.executors) :termopen) 47 | :hover_actions {:auto_focus false} 48 | :inlay_hints {:auto false 49 | :highlight :Comment 50 | :max_len_align false 51 | :max_len_align_padding 1 52 | :only_current_line false 53 | :other_hints_prefix " => " 54 | :parameter_hints_prefix " <- " 55 | :right_align false 56 | :right_align_padding 7 57 | :show_parameter_hints true} 58 | :on_initialized nil 59 | :reload_workspace_from_cargo_toml true 60 | :runnables {:use_telescope true}}}) ]] 61 | -------------------------------------------------------------------------------- /files/nvim/ftplugin/tex.vim: -------------------------------------------------------------------------------- 1 | set nowrap 2 | 3 | " Spell-check set to o, 'o' for 'orthography': 4 | map o :setlocal spell! spelllang=en_us 5 | 6 | " Compile document 7 | map . :w! \| !/bin/scripts/compile-latex.sh "%" 8 | 9 | " Open corresponding .pdf/.html or preview 10 | map p :!zathura $(echo % \| sed 's/tex$/pdf/') & disown 11 | 12 | " " Compile latex file 13 | " map c :w! /tmp/tocompile.tex \| !/bin/scripts/compile-latex.sh "/tmp/tocompile.tex"& 14 | 15 | " " Open corresponding .pdf/.html or preview 16 | " map p :!zathura /tmp/tocompile.pdf & disown 17 | -------------------------------------------------------------------------------- /files/nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- vim.cmd [[packadd packer.nvim]] 2 | vim.cmd [[packadd aniseed]] 3 | 4 | --[[ require('packer').startup(function(use) 5 | -- Packer can manage itself 6 | use 'wbthomason/packer.nvim' 7 | use 'Olical/aniseed' 8 | end) ]] 9 | 10 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 11 | if not vim.loop.fs_stat(lazypath) then 12 | vim.fn.system({ 13 | "git", 14 | "clone", 15 | "--filter=blob:none", 16 | "https://github.com/folke/lazy.nvim.git", 17 | "--branch=stable", -- latest stable release 18 | lazypath, 19 | }) 20 | end 21 | vim.opt.rtp:prepend(lazypath) 22 | 23 | require('aniseed.env').init() 24 | 25 | -------------------------------------------------------------------------------- /files/polybar/polybar.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Terminate already running bar instances 4 | killall -q polybar 5 | 6 | # Wait until the processes have been shut down 7 | while pgrep -x polybar >/dev/null; do sleep 1; done 8 | 9 | # Launch polybar 10 | polybar bar & 11 | {{#if multi_monitor}} 12 | polybar bar2 & 13 | {{/if}} 14 | 15 | # if type "xrandr"; then 16 | # for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do 17 | # MONITOR=$m polybar --reload bar & 18 | # done 19 | # else 20 | # polybar --reload bar & 21 | # fi 22 | -------------------------------------------------------------------------------- /files/python/pythonrc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # This entire thing is unnecessary post v3.13.0a3 3 | # https://github.com/python/cpython/issues/73965 4 | 5 | def is_vanilla() -> bool: 6 | """ :return: whether running "vanilla" Python """ 7 | import sys 8 | return not hasattr(__builtins__, '__IPYTHON__') and 'bpython' not in sys.argv[0] 9 | 10 | 11 | def setup_history(): 12 | """ read and write history from state file """ 13 | import os 14 | import atexit 15 | import readline 16 | from pathlib import Path 17 | 18 | # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables 19 | if state_home := os.environ.get('XDG_STATE_HOME'): 20 | state_home = Path(state_home) 21 | else: 22 | state_home = Path.home() / '.local' / 'state' 23 | if not state_home.is_dir(): 24 | print("Error: XDG_SATE_HOME does not exist at", state_home) 25 | 26 | history: Path = state_home / 'python_history' 27 | 28 | # https://github.com/python/cpython/issues/105694 29 | if not history.is_file(): 30 | with open(history,"w") as f: 31 | f.write("_HiStOrY_V2_" + "\n\n") # breaks on macos + python3 without this. 32 | 33 | readline.read_history_file(history) 34 | atexit.register(readline.write_history_file, history) 35 | 36 | 37 | if is_vanilla(): 38 | setup_history() 39 | -------------------------------------------------------------------------------- /files/redshift/redshift.conf: -------------------------------------------------------------------------------- 1 | [redshift] 2 | dawn-time=05:00 3 | dusk-time=18:00 4 | 5 | -------------------------------------------------------------------------------- /files/rofi/map.csv: -------------------------------------------------------------------------------- 1 | All Programs,/usr/bin/env wofi -show run 2 | Thunar,Thunar 3 | Emacs,emacsclient --create-frame 4 | Bitwarden,bitwarden-desktop 5 | Element,element-desktop 6 | Discord,/usr/bin/scripts/open-move.sh discord 8 7 | OnlyOffice,/usr/bin/scripts/open-move.sh onlyoffice-desktopeditors 5 8 | Mirage,mirage 9 | Anki,/usr/bin/scripts/open-move.sh anki 6 10 | Firefox,/usr/bin/scripts/open-move.sh firefox 2 11 | Xournal,/usr/bin/scripts/open-move.sh xournalpp 3 12 | -------------------------------------------------------------------------------- /files/ssh/config: -------------------------------------------------------------------------------- 1 | AddKeysToAgent yes 2 | -------------------------------------------------------------------------------- /files/starship/starship.toml: -------------------------------------------------------------------------------- 1 | # Don't print a new line at the start of the prompt 2 | add_newline = false 3 | 4 | [character] 5 | success_symbol = "[➜](bold purple)" 6 | error_symbol = "[➜](bold red)" 7 | vicmd_symbol = "[➜](bold orange)" 8 | 9 | -------------------------------------------------------------------------------- /files/taskwarrior/taskrc: -------------------------------------------------------------------------------- 1 | # [Created by task 2.6.2 4/24/2022 21:53:53] 2 | # Taskwarrior program configuration file. 3 | # For more documentation, see https://taskwarrior.org or try 'man task', 'man task-color', 4 | # 'man task-sync' or 'man taskrc' 5 | 6 | # Here is an example of entries that use the default, override and blank values 7 | # variable=foo -- By specifying a value, this overrides the default 8 | # variable= -- By specifying no value, this means no default 9 | # #variable=foo -- By commenting out the line, or deleting it, this uses the default 10 | 11 | # You can also refence environment variables: 12 | # variable=$HOME/task 13 | # variable=$VALUE 14 | 15 | # Use the command 'task show' to see all defaults and overrides 16 | 17 | # Files 18 | data.location=$XDG_DATA_HOME/task/ 19 | hooks.location=$XDG_CONFIG_HOME/task/hooks/ 20 | 21 | # Urgencies 22 | urgency.uda.priority.H.coefficient=6.0 23 | urgency.uda.priority.M.coefficient=3.9 24 | urgency.uda.priority.L.coefficient=-2.0 25 | 26 | # Aliases 27 | alias.burndown=burndown.weekly 28 | alias.ghistory=ghistory.monthly 29 | alias.history=history.monthly 30 | alias.rm=delete 31 | 32 | nag=$TASK_NAG 33 | 34 | hooks=1 35 | news.version=2.6.0 36 | weekstart=monday 37 | 38 | # Appearance 39 | fontunderline=0 40 | rule.color.merge=1 41 | rule.precedence.color=deleted,completed,active,keyword.,tag.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,uda. 42 | row.padding=2 43 | column.padding=2 44 | 45 | # Color configuration 46 | color.active=rgb555 on rgb410 47 | color.alternate=on color234 48 | color.blocked=white on color8 49 | color.blocking=black on color15 50 | color.burndown.done=on rgb010 51 | color.burndown.pending=on color9 52 | color.burndown.started=on color11 53 | color.calendar.due=color0 on color1 54 | color.calendar.due.today=color15 on color1 55 | color.calendar.holiday=color0 on color11 56 | color.calendar.overdue=color0 on color9 57 | color.calendar.scheduled=rgb013 on color15 58 | color.calendar.today=color15 on rgb013 59 | color.calendar.weekend=on color235 60 | color.calendar.weeknumber=rgb013 61 | color.completed=color232 on color121 62 | color.deleted=color232 on color211 63 | color.debug=color4 64 | color.due=color1 65 | color.due.today=rgb400 66 | color.error=white on red 67 | color.footnote=color3 68 | color.header=color3 69 | # color.label 70 | # color.label.sort 71 | color.overdue=color9 72 | # color.project.none 73 | color.recurring=rgb013 74 | color.scheduled=on rgb001 75 | color.summary.background=white on color0 76 | color.summary.bar=black on rgb141 77 | color.tag.next=rgb440 78 | # color.tag.none 79 | color.tagged=rgb031 80 | color.uda.priority.H=color210 81 | color.uda.priority.M=color181 82 | color.uda.priority.L=color250 83 | color.warning=bold red 84 | -------------------------------------------------------------------------------- /files/tealdeer/config.toml: -------------------------------------------------------------------------------- 1 | [style.description] 2 | underline = false 3 | bold = false 4 | italic = false 5 | 6 | [style.command_name] 7 | foreground = "cyan" 8 | underline = false 9 | bold = false 10 | italic = false 11 | 12 | [style.example_text] 13 | foreground = "green" 14 | underline = false 15 | bold = false 16 | italic = false 17 | 18 | [style.example_code] 19 | foreground = "cyan" 20 | underline = false 21 | bold = false 22 | italic = false 23 | 24 | [style.example_variable] 25 | foreground = "cyan" 26 | underline = true 27 | bold = false 28 | italic = false 29 | 30 | [display] 31 | compact = false 32 | use_pager = false 33 | 34 | [updates] 35 | auto_update = true 36 | auto_update_interval_hours = 720 37 | 38 | [directories] 39 | -------------------------------------------------------------------------------- /files/terminfo/alacritty-full.terminfo: -------------------------------------------------------------------------------- 1 | alacritty-full|alacritty with proper support for emacs, 2 | use=alacritty, 3 | sitm=\E[3m, 4 | ritm=\E[23m, 5 | setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, 6 | setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, 7 | -------------------------------------------------------------------------------- /files/terminfo/compile-terminfo.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Directory used for terminfo entrys 4 | DIR="/usr/share/terminfo" 5 | export TERMINFO="$DIR" 6 | 7 | if [ "$EUID" -ne 0 ] 8 | then echo "Please run as root" 9 | exit 10 | fi 11 | 12 | # Compile all terminfo files in this directory 13 | /usr/bin/env find "." -name '*.terminfo' -exec tic -o "$DIR" -x {} \; 14 | -------------------------------------------------------------------------------- /files/terminfo/tmux-256color-full.terminfo: -------------------------------------------------------------------------------- 1 | tmux-256color-full|tmux with proper support for emacs, 2 | use=tmux-256color, 3 | sitm=\E[3m, 4 | ritm=\E[23m, 5 | setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, 6 | setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, 7 | -------------------------------------------------------------------------------- /files/terminfo/xterm-256color-full.terminfo: -------------------------------------------------------------------------------- 1 | xterm-256color-full|generic with proper support for emacs, 2 | use=xterm-256color, 3 | sitm=\E[3m, 4 | ritm=\E[23m, 5 | setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, 6 | setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, 7 | -------------------------------------------------------------------------------- /files/timewarrior/timewarrior.cfg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3nj5m1n/dotfiles/a65f4ba3865b7106004a087577c90cf286b80efe/files/timewarrior/timewarrior.cfg -------------------------------------------------------------------------------- /files/tmux/tmux.conf.home: -------------------------------------------------------------------------------- 1 | source-file ~/.config/tmux/tmux.conf 2 | -------------------------------------------------------------------------------- /files/tofi/config: -------------------------------------------------------------------------------- 1 | width = 100% 2 | height = 100% 3 | border-width = 0 4 | outline-width = 0 5 | padding-left = 35% 6 | padding-top = 35% 7 | result-spacing = 25 8 | num-results = 5 9 | font = monospace 10 | background-color = #000A 11 | -------------------------------------------------------------------------------- /files/tree-sitter/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "parser-directories": [ 3 | "/home/b3nj4m1n/.local/share/tree-sitter", 4 | "/run/current-system/sw/share/ts-grammars" 5 | ], 6 | "theme": { 7 | "comment": { 8 | "color": 245, 9 | "italic": true 10 | }, 11 | "tag": 18, 12 | "constant": 94, 13 | "module": 136, 14 | "type": 23, 15 | "type.builtin": { 16 | "color": 23, 17 | "bold": true 18 | }, 19 | "variable.builtin": { 20 | "bold": true 21 | }, 22 | "string.special": 30, 23 | "punctuation.bracket": 239, 24 | "number": { 25 | "bold": true, 26 | "color": 94 27 | }, 28 | "constructor": 136, 29 | "function": 26, 30 | "attribute": { 31 | "italic": true, 32 | "color": 124 33 | }, 34 | "embedded": null, 35 | "operator": { 36 | "bold": true, 37 | "color": 239 38 | }, 39 | "keyword": 56, 40 | "property": 124, 41 | "punctuation.delimiter": 239, 42 | "constant.builtin": { 43 | "bold": true, 44 | "color": 94 45 | }, 46 | "variable.parameter": { 47 | "underline": true 48 | }, 49 | "function.builtin": { 50 | "color": 26, 51 | "bold": true 52 | }, 53 | "string": 28 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /files/ulauncher/ext_preferences/com.github.ulauncher.ulauncher-hash.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3nj5m1n/dotfiles/a65f4ba3865b7106004a087577c90cf286b80efe/files/ulauncher/ext_preferences/com.github.ulauncher.ulauncher-hash.db -------------------------------------------------------------------------------- /files/ulauncher/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "blacklisted-desktop-dirs": "/usr/share/locale:/usr/share/app-install:/usr/share/kservices5:/usr/share/fk5:/usr/share/kservicetypes5:/usr/share/applications/screensavers:/usr/share/kde4:/usr/share/mimelnk", 3 | "clear-previous-query": true, 4 | "disable-desktop-filters": true, 5 | "grab-mouse-pointer": false, 6 | "hotkey-show-app": "space", 7 | "render-on-screen": "mouse-pointer-monitor", 8 | "show-indicator-icon": true, 9 | "show-recent-apps": "0", 10 | "terminal-command": "", 11 | "theme-name": "dark" 12 | } -------------------------------------------------------------------------------- /files/ulauncher/shortcuts.json: -------------------------------------------------------------------------------- 1 | { 2 | "16728c47-c93f-4f6b-b849-603339d7b234": { 3 | "id": "16728c47-c93f-4f6b-b849-603339d7b234", 4 | "name": "Google Search", 5 | "keyword": "g", 6 | "cmd": "https://google.com/search?q=%s", 7 | "icon": "/nix/store/4rv0x3536fhmd7y234yjz85vp6p1dmwh-ulauncher-5.15.3/share/ulauncher/media/google-search-icon.png", 8 | "is_default_search": true, 9 | "run_without_argument": false, 10 | "added": 1695760466.7133067 11 | }, 12 | "802aa77c-43cc-4129-b3e7-b30965a946c5": { 13 | "id": "802aa77c-43cc-4129-b3e7-b30965a946c5", 14 | "name": "Stack Overflow", 15 | "keyword": "so", 16 | "cmd": "https://stackoverflow.com/search?q=%s", 17 | "icon": "/nix/store/4rv0x3536fhmd7y234yjz85vp6p1dmwh-ulauncher-5.15.3/share/ulauncher/media/stackoverflow-icon.svg", 18 | "is_default_search": true, 19 | "run_without_argument": false, 20 | "added": 1695760466.7133207 21 | }, 22 | "280b0559-bfbc-45b5-9c07-2cea13f9b769": { 23 | "id": "280b0559-bfbc-45b5-9c07-2cea13f9b769", 24 | "name": "Wikipedia", 25 | "keyword": "wiki", 26 | "cmd": "https://en.wikipedia.org/wiki/%s", 27 | "icon": "/nix/store/4rv0x3536fhmd7y234yjz85vp6p1dmwh-ulauncher-5.15.3/share/ulauncher/media/wikipedia-icon.png", 28 | "is_default_search": true, 29 | "run_without_argument": false, 30 | "added": 1695760466.7133307 31 | } 32 | } -------------------------------------------------------------------------------- /files/wezterm/wezterm.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require 'wezterm'; 2 | 3 | return { 4 | default_prog = { 'tmux' }, 5 | 6 | color_scheme = "Catppuccin Macchiato", 7 | 8 | font = wezterm.font("{{ font.font }}"), 9 | font_size = {{ font.font_size_float }}, 10 | 11 | window_padding = { 12 | left = 0, 13 | right = 0, 14 | top = 0, 15 | bottom = 0, 16 | }, 17 | 18 | scrollback_lines = 81920, 19 | 20 | enable_tab_bar = false, 21 | 22 | window_background_opacity = 1.0, 23 | 24 | front_end = "WebGpu" 25 | } 26 | 27 | -------------------------------------------------------------------------------- /files/wofi/config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b3nj5m1n/dotfiles/a65f4ba3865b7106004a087577c90cf286b80efe/files/wofi/config -------------------------------------------------------------------------------- /files/wofi/style.css: -------------------------------------------------------------------------------- 1 | window { 2 | margin: 0px; 3 | border: 1px solid {{ colors.prm }}; 4 | background-color: {{ colors.bg }}; 5 | } 6 | 7 | #input { 8 | margin: 5px; 9 | border: none; 10 | color: {{ colors.fg }}; 11 | background-color: {{ colors.bg }}; 12 | } 13 | 14 | #inner-box { 15 | margin: 5px; 16 | border: none; 17 | background-color: {{ colors.bg }}; 18 | } 19 | 20 | #outer-box { 21 | margin: 5px; 22 | border: none; 23 | background-color: {{ colors.bg }}; 24 | } 25 | 26 | #scroll { 27 | margin: 0px; 28 | border: none; 29 | } 30 | 31 | #text { 32 | margin: 5px; 33 | border: none; 34 | color: {{ colors.fg }}; 35 | } 36 | 37 | #entry:selected { 38 | background-color: {{ colors.bg_bright }}; 39 | } 40 | -------------------------------------------------------------------------------- /files/zathura/zathurarc: -------------------------------------------------------------------------------- 1 | set sandbox none 2 | set statusbar-h-padding 0 3 | set statusbar-v-padding 0 4 | set page-padding 1 5 | set selection-clipboard clipboard 6 | set adjust-open width 7 | map u scroll half-up 8 | map d scroll half-down 9 | map H navigate previous 10 | map [fullscreen] H navigate previous 11 | map L navigate next 12 | map [fullscreen] L navigate next 13 | map D toggle_page_mode 14 | map r reload 15 | map R rotate 16 | map K zoom in 17 | map J zoom out 18 | map i recolor 19 | map F toggle_fullscreen 20 | map [fullscreen] F toggle_fullscreen 21 | -------------------------------------------------------------------------------- /files/zsh/zshenv: -------------------------------------------------------------------------------- 1 | export ZDOTDIR="$HOME/.config/zsh" 2 | -------------------------------------------------------------------------------- /files/zsh/zshrc.home: -------------------------------------------------------------------------------- 1 | source ~/.config/zsh/.zshrc 2 | -------------------------------------------------------------------------------- /nix/hardware/pc.nix: -------------------------------------------------------------------------------- 1 | # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 | # and may be overwritten by future invocations. Please make changes 3 | # to /etc/nixos/configuration.nix instead. 4 | { 5 | config, 6 | lib, 7 | pkgs, 8 | modulesPath, 9 | ... 10 | }: { 11 | imports = [ 12 | (modulesPath + "/installer/scan/not-detected.nix") 13 | ]; 14 | 15 | boot.initrd.availableKernelModules = ["ahci" "ohci_pci" "ehci_pci" "pata_atiixp" "xhci_pci" "usb_storage" "usbhid" "sd_mod"]; 16 | boot.initrd.kernelModules = ["dm-snapshot"]; 17 | boot.kernelModules = ["amdgpu" "kvm-amd"]; 18 | boot.extraModulePackages = []; 19 | boot.supportedFilesystems = ["btrfs" "ntfs"]; 20 | 21 | fileSystems."/" = { 22 | device = "/dev/disk/by-uuid/fcd6c5d7-2321-4c05-b34b-cef1d299c8d8"; 23 | fsType = "btrfs"; 24 | options = ["subvol=root" "compress-force=zstd" "noatime"]; 25 | }; 26 | 27 | fileSystems."/home" = { 28 | device = "/dev/disk/by-uuid/fcd6c5d7-2321-4c05-b34b-cef1d299c8d8"; 29 | fsType = "btrfs"; 30 | options = ["subvol=home" "compress-force=zstd"]; 31 | }; 32 | 33 | fileSystems."/nix" = { 34 | device = "/dev/disk/by-uuid/fcd6c5d7-2321-4c05-b34b-cef1d299c8d8"; 35 | fsType = "btrfs"; 36 | options = ["subvol=nix" "compress-force=zstd" "noatime"]; 37 | }; 38 | 39 | fileSystems."/persist" = { 40 | device = "/dev/disk/by-uuid/fcd6c5d7-2321-4c05-b34b-cef1d299c8d8"; 41 | fsType = "btrfs"; 42 | options = ["subvol=persist" "compress-force=zstd"]; 43 | }; 44 | 45 | fileSystems."/var/log" = { 46 | device = "/dev/disk/by-uuid/fcd6c5d7-2321-4c05-b34b-cef1d299c8d8"; 47 | fsType = "btrfs"; 48 | options = ["subvol=log" "compress-force=zstd"]; 49 | neededForBoot = true; 50 | }; 51 | 52 | fileSystems."/boot" = { 53 | device = "/dev/disk/by-uuid/263D-3836"; 54 | fsType = "vfat"; 55 | }; 56 | 57 | swapDevices = [ 58 | {device = "/dev/disk/by-uuid/d3fcdef7-e64a-4854-a08d-7e5298b9d7a8";} 59 | ]; 60 | 61 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 62 | # (the default) this is the recommended approach. When using systemd-networkd it's 63 | # still possible to use this option, but it's recommended to use it in conjunction 64 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 65 | networking.useDHCP = lib.mkDefault true; 66 | # networking.interfaces.enp2s0.useDHCP = lib.mkDefault true; 67 | 68 | nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 69 | hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 70 | } 71 | -------------------------------------------------------------------------------- /nix/hardware/x240.nix: -------------------------------------------------------------------------------- 1 | # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 | # and may be overwritten by future invocations. Please make changes 3 | # to /etc/nixos/configuration.nix instead. 4 | { 5 | config, 6 | lib, 7 | pkgs, 8 | modulesPath, 9 | ... 10 | }: { 11 | imports = [ 12 | (modulesPath + "/installer/scan/not-detected.nix") 13 | ]; 14 | 15 | boot.initrd.availableKernelModules = ["xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"]; 16 | boot.initrd.kernelModules = ["dm-snapshot"]; 17 | boot.kernelModules = ["kvm-intel"]; 18 | boot.extraModulePackages = []; 19 | 20 | fileSystems."/" = { 21 | device = "/dev/disk/by-label/NIXROOT"; 22 | fsType = "ext4"; 23 | }; 24 | 25 | fileSystems."/boot" = { 26 | device = "/dev/disk/by-label/NIXBOOT"; 27 | fsType = "vfat"; 28 | }; 29 | 30 | swapDevices = []; 31 | 32 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 33 | # (the default) this is the recommended approach. When using systemd-networkd it's 34 | # still possible to use this option, but it's recommended to use it in conjunction 35 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 36 | networking.useDHCP = lib.mkDefault true; 37 | # networking.interfaces.enp0s25.useDHCP = lib.mkDefault true; 38 | # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 39 | 40 | hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 41 | 42 | nixpkgs.hostPlatform = "x86_64-linux"; 43 | } 44 | -------------------------------------------------------------------------------- /nix/hardware/x270.nix: -------------------------------------------------------------------------------- 1 | # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 | # and may be overwritten by future invocations. Please make changes 3 | # to /etc/nixos/configuration.nix instead. 4 | { 5 | config, 6 | lib, 7 | pkgs, 8 | modulesPath, 9 | ... 10 | }: { 11 | imports = [ 12 | (modulesPath + "/installer/scan/not-detected.nix") 13 | ]; 14 | 15 | boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"]; 16 | boot.initrd.kernelModules = []; 17 | boot.kernelModules = ["kvm-intel"]; 18 | boot.extraModulePackages = []; 19 | 20 | fileSystems."/" = { 21 | device = "/dev/nvme0n1p2"; 22 | fsType = "btrfs"; 23 | options = ["subvol=root" "compress-force=zstd" "noatime"]; 24 | }; 25 | 26 | fileSystems."/home" = { 27 | device = "/dev/nvme0n1p2"; 28 | fsType = "btrfs"; 29 | options = ["subvol=home" "compress-force=zstd"]; 30 | }; 31 | 32 | fileSystems."/nix" = { 33 | device = "/dev/nvme0n1p2"; 34 | fsType = "btrfs"; 35 | options = ["subvol=nix" "compress-force=zstd" "noatime"]; 36 | }; 37 | 38 | fileSystems."/persist" = { 39 | device = "/dev/nvme0n1p2"; 40 | fsType = "btrfs"; 41 | options = ["subvol=persist" "compress-force=zstd"]; 42 | }; 43 | 44 | fileSystems."/var/log" = { 45 | device = "/dev/nvme0n1p2"; 46 | fsType = "btrfs"; 47 | options = ["subvol=log" "compress-force=zstd"]; 48 | neededForBoot = true; 49 | }; 50 | 51 | fileSystems."/boot" = { 52 | device = "/dev/disk/by-uuid/E244-C10A"; 53 | fsType = "vfat"; 54 | }; 55 | 56 | swapDevices = []; 57 | 58 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 59 | # (the default) this is the recommended approach. When using systemd-networkd it's 60 | # still possible to use this option, but it's recommended to use it in conjunction 61 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 62 | networking.useDHCP = lib.mkDefault true; 63 | # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; 64 | # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 65 | 66 | powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 67 | hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 68 | 69 | nixpkgs.hostPlatform = "x86_64-linux"; 70 | } 71 | -------------------------------------------------------------------------------- /nix/home-manager/adelie.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | outputs, 4 | lib, 5 | config, 6 | pkgs, 7 | ... 8 | }: { 9 | imports = let 10 | homeManagerModules = import ../modules/home-manager; 11 | in [ 12 | homeManagerModules.neovim 13 | # homeManagerModules.tree-sitter 14 | homeManagerModules.theming 15 | homeManagerModules.gpg 16 | homeManagerModules.git 17 | homeManagerModules.shell 18 | ]; 19 | 20 | # nixpkgs = { 21 | # overlays = [ 22 | # outputs.overlays.modifications 23 | # outputs.overlays.additions 24 | # outputs.overlays.channels 25 | # ]; 26 | # config = { 27 | # allowUnfree = false; 28 | # }; 29 | # }; 30 | 31 | home = { 32 | username = "b3nj4m1n"; 33 | homeDirectory = "/home/b3nj4m1n"; 34 | sessionVariables.MAINSSHKEYFILE = "id_ed25519"; 35 | }; 36 | 37 | # Add stuff for your user as you see fit: 38 | # home.packages = with pkgs; [ steam ]; 39 | 40 | programs.home-manager.enable = true; 41 | 42 | programs.git.signing.key = "40C2656E7D651A18"; 43 | 44 | services.gpg-agent.pinentryPackage = pkgs.pinentry-gtk2; 45 | 46 | # Nicely reload system units when changing configs 47 | systemd.user.startServices = "sd-switch"; 48 | 49 | # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion 50 | home.stateVersion = "23.05"; 51 | } 52 | -------------------------------------------------------------------------------- /nix/home-manager/chinstrap.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | outputs, 4 | lib, 5 | config, 6 | pkgs, 7 | ... 8 | }: { 9 | imports = let 10 | homeManagerModules = import ../modules/home-manager; 11 | in [ 12 | homeManagerModules.neovim 13 | homeManagerModules.gpg 14 | homeManagerModules.git 15 | homeManagerModules.shell 16 | ]; 17 | 18 | # nixpkgs = { 19 | # overlays = [ 20 | # outputs.overlays.modifications 21 | # outputs.overlays.additions 22 | # outputs.overlays.channels 23 | # ]; 24 | # }; 25 | 26 | home = { 27 | username = "admin"; 28 | homeDirectory = "/home/admin"; 29 | sessionVariables.MAINSSHKEYFILE = "id_rsa"; 30 | }; 31 | 32 | # Add stuff for your user as you see fit: 33 | programs.neovim.enable = true; 34 | # home.packages = with pkgs; [ steam ]; 35 | 36 | programs.home-manager.enable = true; 37 | 38 | programs.git.signing.key = "D11CA4E3FA0C1051"; 39 | 40 | services.gpg-agent.pinentryPackage = pkgs.pinentry-gtk2; 41 | 42 | # Nicely reload system units when changing configs 43 | systemd.user.startServices = "sd-switch"; 44 | 45 | # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion 46 | home.stateVersion = "23.05"; 47 | } 48 | -------------------------------------------------------------------------------- /nix/home-manager/emperor.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | outputs, 4 | lib, 5 | config, 6 | pkgs, 7 | ... 8 | }: { 9 | imports = let 10 | homeManagerModules = import ../modules/home-manager; 11 | in [ 12 | homeManagerModules.neovim 13 | # homeManagerModules.tree-sitter 14 | homeManagerModules.theming 15 | homeManagerModules.gpg 16 | homeManagerModules.git 17 | homeManagerModules.shell 18 | # homeManagerModules.hyprland 19 | ]; 20 | 21 | # nixpkgs = { 22 | # overlays = [ 23 | # outputs.overlays.modifications 24 | # outputs.overlays.additions 25 | # outputs.overlays.channels 26 | # ]; 27 | # config = { 28 | # allowUnfree = false; 29 | # }; 30 | # }; 31 | 32 | home = { 33 | username = "b3nj4m1n"; 34 | homeDirectory = "/home/b3nj4m1n"; 35 | sessionVariables.MAINSSHKEYFILE = "id_ed25519"; 36 | }; 37 | 38 | # Add stuff for your user as you see fit: 39 | # home.packages = with pkgs; [ steam ]; 40 | 41 | programs.home-manager.enable = true; 42 | 43 | programs.git.signing.key = "309D4C8689849C5B"; 44 | 45 | services.gpg-agent.pinentryPackage = pkgs.pinentry-gtk2; 46 | 47 | # Nicely reload system units when changing configs 48 | systemd.user.startServices = "sd-switch"; 49 | 50 | # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion 51 | home.stateVersion = "23.05"; 52 | } 53 | -------------------------------------------------------------------------------- /nix/modules/home-manager/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | neovim = import ./neovim.nix; 3 | helix = import ./helix.nix; 4 | tree-sitter = import ./tree-sitter.nix; 5 | theming = import ./theming.nix; 6 | gpg = import ./gpg.nix; 7 | git = import ./git.nix; 8 | shell = import ./shell.nix; 9 | xdg-compliance = import ./xdg-compliance.nix; 10 | hyprland = import ./hyprland.nix; 11 | } 12 | -------------------------------------------------------------------------------- /nix/modules/home-manager/git.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: { 6 | imports = [ 7 | ]; 8 | 9 | options = {}; 10 | 11 | config = { 12 | programs.git = { 13 | enable = true; 14 | userEmail = "b3nj4m1n@gmx.net"; 15 | userName = "b3nj5m1n"; 16 | aliases = { 17 | pr = "!f() { git fetch -fu \${2:-origin} refs/pull/\$1/head:pr/\$1 && git checkout pr/\$1; }; f"; # https://stackoverflow.com/a/14969986 18 | }; 19 | difftastic = {enable = true;}; 20 | signing = { 21 | signByDefault = true; 22 | }; 23 | extraConfig = { 24 | init.defaultBranch = "main"; 25 | }; 26 | }; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /nix/modules/home-manager/gpg.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | config, 5 | ... 6 | }: { 7 | imports = [ 8 | ]; 9 | 10 | options = {}; 11 | 12 | config = { 13 | programs.gpg = { 14 | enable = true; 15 | homedir = "${config.xdg.dataHome}/gnupg"; 16 | settings = {}; 17 | }; 18 | services.gpg-agent = { 19 | enable = true; 20 | # pinentryFlavor = "gtk2"; 21 | extraConfig = '' 22 | ''; 23 | }; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /nix/modules/home-manager/helix.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: { 6 | imports = [ 7 | ]; 8 | 9 | options = {}; 10 | 11 | config = { 12 | home.sessionVariables.EDITOR = "hx"; 13 | programs.helix = { 14 | enable = true; 15 | settings = { 16 | theme = "catppuccin_macchiato"; 17 | editor = { 18 | idle-timeout = 50; 19 | line-number = "relative"; 20 | cursor-shape = { 21 | insert = "bar"; 22 | }; 23 | whitespace = { 24 | render = { 25 | tab = "all"; 26 | newline = "all"; 27 | }; 28 | }; 29 | indent-guides = { 30 | render = true; 31 | }; 32 | }; 33 | keys = { 34 | normal = { 35 | esc = ["collapse_selection" "keep_primary_selection"]; 36 | }; 37 | }; 38 | }; 39 | }; 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /nix/modules/home-manager/neovim.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: { 6 | imports = [ 7 | ]; 8 | 9 | options = {}; 10 | 11 | config = { 12 | home.packages = with pkgs; [luajitPackages.luarocks]; 13 | home.sessionVariables.EDITOR = "nvim"; 14 | programs.neovim.enable = true; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/modules/home-manager/theming.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: { 6 | imports = [ 7 | ]; 8 | 9 | options = {}; 10 | 11 | config = { 12 | home.packages = with pkgs; [gtk-engine-murrine]; 13 | gtk = { 14 | enable = true; 15 | theme = { 16 | name = "Catppuccin-Macchiato-Compact-Pink-Dark"; 17 | package = pkgs.catppuccin-gtk.override { 18 | accents = ["pink"]; 19 | size = "compact"; 20 | tweaks = ["rimless"]; 21 | variant = "macchiato"; 22 | }; 23 | }; 24 | cursorTheme = { 25 | package = pkgs.bibata-cursors; 26 | name = "Bibata-Original-Ice"; 27 | size = 24; 28 | }; 29 | iconTheme = { 30 | name = "Colloid"; 31 | package = pkgs.colloid-icon-theme; 32 | }; 33 | }; 34 | home.pointerCursor = { 35 | package = pkgs.bibata-cursors; 36 | name = "Bibata-Original-Ice"; 37 | size = 24; 38 | }; 39 | xdg.dataFile."icons/default/index.theme".text = '' 40 | [icon theme] 41 | Name=Default 42 | Comment=Default Cursor Theme 43 | Inherits=Bibata-Original-Classic 44 | ''; 45 | }; 46 | } 47 | -------------------------------------------------------------------------------- /nix/modules/home-manager/tree-sitter.nix: -------------------------------------------------------------------------------- 1 | # Note that this module is for configuring treesitter for use in neovim, not for 2 | # use with the tree-sitter cli 3 | { 4 | pkgs, 5 | lib, 6 | ... 7 | }: let 8 | nvim-parser-location = "nvim/site/pack/packer/opt/nvim-treesitter/parser"; 9 | # Conver the package name to the language name, for example: 10 | # pname-to-lname "tree-sitter-rust-grammar" -> "rust" 11 | pname-to-lname = pname: 12 | lib.strings.removeSuffix "-grammar" (lib.strings.removePrefix "tree-sitter-" pname); 13 | genLink = package-name: let 14 | package = pkgs.pr259779.tree-sitter-grammars."${package-name}"; 15 | language-name = pname-to-lname package.pname; 16 | in { 17 | "${nvim-parser-location}/${language-name}.so".source = "${package.outPath}/parser"; 18 | }; 19 | genLinks = language-names: 20 | lib.lists.foldl (a: b: a // b) {} (builtins.map genLink language-names); 21 | getAll = builtins.filter (x: builtins.isAttrs pkgs.pr259779.tree-sitter-grammars."${x}") (builtins.attrNames pkgs.tree-sitter-grammars); 22 | genAll = genLinks getAll; 23 | in { 24 | imports = [ 25 | ]; 26 | 27 | options = {}; 28 | 29 | config = { 30 | xdg.dataFile = genAll; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /nix/modules/nixos/all-languages.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./webdev.nix 4 | ./javascript.nix 5 | ./typescript.nix 6 | ./elm.nix 7 | ./haskell.nix 8 | ./bash.nix 9 | ./java.nix 10 | ./lua.nix 11 | ./fennel.nix 12 | ./rust.nix 13 | ./nix.nix 14 | ./c.nix 15 | ./common-lisp.nix 16 | ./python.nix 17 | ./latex.nix 18 | ./ocaml.nix 19 | ]; 20 | } 21 | -------------------------------------------------------------------------------- /nix/modules/nixos/android.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | androidStudioPackages.canary 10 | kotlin 11 | kotlin-language-server 12 | ]; 13 | programs.adb.enable = true; 14 | users.users."b3nj4m1n".extraGroups = ["adbusers"]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/modules/nixos/aria2.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | aria 10 | aria_ng 11 | ]; 12 | systemd.services.aria_ng = { 13 | enable = false; 14 | description = "Server aria_ng"; 15 | path = [pkgs.static-web-server]; 16 | unitConfig = { 17 | Type = "simple"; 18 | }; 19 | serviceConfig = { 20 | ExecStart = "${pkgs.static-web-server}/bin/static-web-server -p 30020 -d ${pkgs.aria_ng}"; 21 | }; 22 | wantedBy = ["multi-user.target"]; 23 | }; 24 | networking.firewall.allowedTCPPorts = [30020 30019]; 25 | services.aria2 = { 26 | enable = false; 27 | openPorts = true; 28 | settings = { 29 | rpc-listen-port = 30019; 30 | }; 31 | rpcSecretFile = /run/secrets/aria2-rpc-token.txt; 32 | }; 33 | }; 34 | } 35 | -------------------------------------------------------------------------------- /nix/modules/nixos/audio.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | # sound.enable = true; 9 | environment.systemPackages = with pkgs; [ 10 | mpc-cli 11 | ncmpcpp 12 | pavucontrol 13 | pulseaudio 14 | ncpamixer 15 | stable.beets 16 | ]; 17 | security.rtkit.enable = true; 18 | services.pipewire = { 19 | enable = true; 20 | # systemWide = true; 21 | alsa.enable = true; 22 | alsa.support32Bit = true; 23 | pulse.enable = true; 24 | jack.enable = true; 25 | wireplumber.enable = true; 26 | }; 27 | services.mpd = { 28 | enable = true; 29 | user = "b3nj4m1n"; 30 | network = { 31 | listenAddress = "any"; 32 | }; 33 | # musicDirectory = ""; 34 | extraConfig = '' 35 | audio_output { 36 | type "pipewire" 37 | name "PipeWire" 38 | } 39 | ''; 40 | }; 41 | systemd.services.mpd.environment = { 42 | # https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/609 43 | XDG_RUNTIME_DIR = "/run/user/1000"; 44 | }; 45 | 46 | services.navidrome = { 47 | enable = true; 48 | settings = { 49 | Address = "0.0.0.0"; 50 | Port = 4533; 51 | }; 52 | }; 53 | 54 | networking.firewall = { 55 | allowedTCPPorts = [4533]; 56 | }; 57 | 58 | fileSystems."/var/lib/navidrome/music" = { 59 | device = "/home/b3nj4m1n/Music"; 60 | options = ["bind" "perms=444"]; 61 | }; 62 | fileSystems."/var/lib/mpd/music" = { 63 | device = "/home/b3nj4m1n/Music"; 64 | options = ["bind" "perms=444"]; 65 | }; 66 | 67 | /* 68 | networking.firewall = { 69 | allowedTCPPorts = [4533]; 70 | }; 71 | */ 72 | }; 73 | } 74 | -------------------------------------------------------------------------------- /nix/modules/nixos/base.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./networking.nix 4 | ./security.nix 5 | ]; 6 | 7 | options = {}; 8 | 9 | config = { 10 | environment.systemPackages = with pkgs; [ 11 | home-manager 12 | ]; 13 | time.timeZone = "Europe/Berlin"; 14 | i18n.defaultLocale = "en_GB.UTF-8"; 15 | environment.pathsToLink = ["/share" "/share/zsh"]; 16 | services.cron.enable = true; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /nix/modules/nixos/bash.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | bash 10 | nodePackages.bash-language-server 11 | shellcheck 12 | ]; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nix/modules/nixos/battery-thing.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | lib, 5 | ... 6 | }: { 7 | imports = [ 8 | ]; 9 | 10 | config = { 11 | environment.systemPackages = with pkgs; [ 12 | ]; 13 | 14 | systemd.services = { 15 | battery-check = { 16 | description = "Check if battery needs to be swapped"; 17 | path = with pkgs; [kbd]; 18 | environment = { 19 | WAYLAND_DISPLAY = "wayland-1"; 20 | XDG_RUNTIME_DIR = "/run/user/1000"; 21 | }; 22 | serviceConfig = { 23 | #User = "b3nj4m1n"; 24 | ExecStart = "-${pkgs.bash}/bin/bash /home/b3nj4m1n/.local/share/bin/bsod.sh"; 25 | }; 26 | # timer = "your-script-timer"; 27 | }; 28 | }; 29 | 30 | systemd.timers."battery-check" = { 31 | wantedBy = ["timers.target"]; 32 | timerConfig = { 33 | OnBootSec = "1m"; 34 | OnUnitActiveSec = "1m"; 35 | Unit = "battery-check.service"; 36 | }; 37 | }; 38 | 39 | /* 40 | systemd.services = { 41 | "battery-check" = { 42 | script = '' 43 | battery_level=$(cat /sys/class/power_supply/BAT0/capacity) 44 | if [ "$battery_level" -lt 60 ]; then 45 | /home/b3nj4m1n/.local/share/bin/bsod.sh 46 | else 47 | /home/b3nj4m1n/.local/share/bin/bsod.sh 48 | fi 49 | ''; 50 | }; 51 | }; 52 | */ 53 | }; 54 | } 55 | -------------------------------------------------------------------------------- /nix/modules/nixos/c.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | clang 10 | clang-tools 11 | # libclang 12 | cmake 13 | gcc 14 | ]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/modules/nixos/common-lisp.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | roswell 10 | ]; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/modules/nixos/default.nix: -------------------------------------------------------------------------------- 1 | # Add your reusable NixOS modules to this directory, on their own file (https://nixos.wiki/wiki/Module). 2 | # These should be stuff you would like to share with others, not your personal configurations. 3 | { 4 | pkgs, 5 | user, 6 | }: { 7 | # Base module with stuff I want everywhere 8 | base = import ./base.nix; 9 | networking = import ./networking.nix; 10 | security = import ./security.nix; 11 | shared-repos = import ./shared-repos.nix; 12 | 13 | # Terminal stuff 14 | shell = import ./shell.nix; 15 | zsh = import ./zsh.nix; 16 | neovim = import ./neovim.nix; 17 | terminal = import ./terminal.nix; 18 | 19 | # Desktop stuff 20 | desktop = import ./desktop.nix; 21 | wayland = import ./wayland.nix; 22 | sway = import ./sway.nix; 23 | fonts = import ./fonts.nix; 24 | audio = import ./audio.nix; 25 | 26 | # Languages 27 | all-languages = import ./all-languages.nix; 28 | webdev = import ./webdev.nix; 29 | javascript = import ./javascript.nix; 30 | typescript = import ./typescript.nix; 31 | elm = import ./elm.nix; 32 | haskell = import ./haskell.nix; 33 | bash = import ./bash.nix; 34 | java = import ./java.nix; 35 | lua = import ./lua.nix; 36 | fennel = import ./fennel.nix; 37 | rust = import ./rust.nix; 38 | nix = import ./nix.nix; 39 | c = import ./c.nix; 40 | common-lisp = import ./common-lisp.nix; 41 | python = import ./python.nix; 42 | latex = import ./latex.nix; 43 | ocaml = import ./ocaml.nix; 44 | 45 | # pandoc = import ./pandoc.nix; 46 | steam = import ./steam.nix; 47 | nvidia = import ./nvidia.nix; 48 | gitega = import ./gitega.nix; 49 | virtual-machines = import ./virtual-machines.nix; 50 | tree-sitter = import ./tree-sitter.nix; 51 | fix-suspend = import ./fix-suspend.nix; 52 | open-rgb = import ./open-rgb.nix; 53 | docker = import ./docker.nix { 54 | inherit pkgs; 55 | inherit user; 56 | }; 57 | jellyfin = import ./jellyfin.nix; 58 | encryption = import ./encryption.nix; 59 | aria2 = import ./aria2.nix; 60 | dynamic-wallpaper = import ./dynamic-wallpaper.nix; 61 | android = import ./android.nix; 62 | postgres = import ./postgres.nix; 63 | battery-thing = import ./battery-thing.nix; 64 | pix2tex = import ./pix2tex.nix; 65 | math = import ./math.nix; 66 | swaylock-plugin = import ./swaylock-plugin.nix; 67 | radicale = import ./radicale.nix; 68 | grocy = import ./grocy.nix; 69 | } 70 | -------------------------------------------------------------------------------- /nix/modules/nixos/desktop.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./audio.nix 4 | ./fonts.nix 5 | ]; 6 | 7 | options = {}; 8 | 9 | config = { 10 | environment.systemPackages = with pkgs; [ 11 | anki-bin 12 | calibre 13 | swaynotificationcenter 14 | feh 15 | mangohud 16 | (tor-browser-bundle-bin.override { 17 | # useHardenedMalloc = false; 18 | }) 19 | thunderbird-128 20 | libnotify 21 | neovide 22 | peek 23 | # pop-launcher 24 | syncthing 25 | ydotool 26 | xfce.thunar 27 | nautilus 28 | file-roller 29 | stable.element-desktop 30 | mpv 31 | vlc 32 | zathura 33 | gsmartcontrol 34 | swww 35 | rnote 36 | xournalpp 37 | inkscape-with-extensions 38 | stable.kgeotag 39 | (callPackage ../../pkgs/zotero-wrapped {}) 40 | # (callPackage ../../pkgs/logseq-wrapped {}) 41 | # (callPackage ../../pkgs/firefox-trapped {}) 42 | firefox 43 | pr331310.qutebrowser 44 | ]; 45 | 46 | services = { 47 | syncthing = { 48 | enable = true; 49 | user = "b3nj4m1n"; 50 | dataDir = "/home/b3nj4m1n/.local/share"; 51 | configDir = "/home/b3nj4m1n/.config/syncthing"; 52 | }; 53 | }; 54 | 55 | services.xserver.enable = true; 56 | 57 | # TODO Use the same DM config on both systems 58 | /* 59 | services.xserver.displayManager.lightdm = { 60 | greeters = { 61 | slick.enable = true; 62 | }; 63 | }; 64 | */ 65 | # hardware.opengl.mesaPackage = pkgs.mesa_22; # Workaround TODO remove when fixed 66 | 67 | services.xserver.xkb = { 68 | options = "caps:escape"; 69 | layout = "de"; 70 | }; 71 | 72 | xdg.mime = { 73 | enable = true; 74 | defaultApplications = { 75 | "application/pdf" = "org.pwmt.zathura.desktop"; 76 | }; 77 | }; 78 | }; 79 | } 80 | -------------------------------------------------------------------------------- /nix/modules/nixos/docker.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | user, 4 | ... 5 | }: { 6 | imports = [ 7 | ]; 8 | 9 | options = {}; 10 | 11 | config = { 12 | environment.systemPackages = with pkgs; [ 13 | docker-compose 14 | ]; 15 | virtualisation.docker.enable = true; 16 | users.users."${user}".extraGroups = ["docker"]; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /nix/modules/nixos/elm.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | elmPackages.elm 10 | elmPackages.elm-language-server 11 | elmPackages.elm-format 12 | ]; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nix/modules/nixos/encryption.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | cryptsetup 10 | ]; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/modules/nixos/fennel.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./lua.nix 4 | ]; 5 | 6 | options = {}; 7 | 8 | config = { 9 | environment.systemPackages = with pkgs; [ 10 | fennel 11 | fnlfmt 12 | # fennel-language-server 13 | ]; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /nix/modules/nixos/fix-suspend.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | systemd.services.fixSuspend = { 9 | enable = true; 10 | description = "Fix immediate wakeup on suspend/hibernate"; 11 | unitConfig = { 12 | Type = "oneshot"; 13 | }; 14 | serviceConfig = { 15 | User = "root"; 16 | ExecStart = "-${pkgs.bash}/bin/bash -c \"echo GPP0 > /proc/acpi/wakeup\""; 17 | }; 18 | wantedBy = ["multi-user.target"]; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /nix/modules/nixos/fonts.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | # fonts.enableDefaultPackages = true; 9 | fonts.packages = with pkgs; [ 10 | arkpandora_ttf 11 | liberation_ttf 12 | xits-math 13 | newcomputermodern 14 | nerd-fonts.fantasque-sans-mono 15 | nerd-fonts.fira-mono 16 | nerd-fonts.ubuntu-mono 17 | ]; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /nix/modules/nixos/gitega.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | systemd.timers."gitega" = { 9 | wantedBy = ["timers.target"]; 10 | timerConfig = { 11 | OnBootSec = "15min"; 12 | OnUnitActiveSec = "1day"; 13 | Unit = "gitega.service"; 14 | }; 15 | }; 16 | systemd.services.gitega = { 17 | description = "Run gitega"; 18 | path = with pkgs; [libnotify findutils python313]; 19 | environment = { 20 | PYTHONPATH = let 21 | packageNames = ["cffi" "pycparser" "requests" "brotlicffi" "certifi" "charset-normalizer" "idna" "urllib3" "brotli" "pysocks" "colorama" "dateutils" "python-dateutil" "six" "pytz"]; 22 | packages = ["${pkgs.python313}"] ++ map (s: "${pkgs.python313Packages.${s}}") packageNames; 23 | packagesFull = map (s: "${s}/lib/python3.9/site-packages") packages; 24 | packagesPath = builtins.concatStringsSep ":" packagesFull; 25 | in "${packagesPath}"; 26 | }; 27 | script = let 28 | gitegaSourcePath = "/home/b3nj4m1n/code/gitega"; 29 | gitegaDataPath = "/home/b3nj4m1n/.local/share/gitega"; 30 | email = "b3nj5m1n@gmx.net"; 31 | in '' 32 | cd ${gitegaSourcePath} 33 | for account in $(find "${gitegaDataPath}/" -maxdepth 1 ! -path . -type d -printf '%P\n' | sed 's/-github//g'); 34 | do 35 | XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send "Updating github stats for: $account" 36 | python update.py --name "$account" --rootDir "${gitegaDataPath}" \ 37 | && XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send "Successfully updated github stats for: $account" 38 | done 39 | ''; 40 | serviceConfig = { 41 | Type = "oneshot"; 42 | User = "b3nj4m1n"; 43 | }; 44 | }; 45 | }; 46 | } 47 | -------------------------------------------------------------------------------- /nix/modules/nixos/grocy.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | ]; 10 | virtualisation.oci-containers.containers.grocy = { 11 | image = "lscr.io/linuxserver/grocy:latest"; 12 | ports = ["9283:80"]; 13 | environment = { 14 | PUID = "1000"; 15 | PGID = "1000"; 16 | TZ = "Etc/UTC"; 17 | }; 18 | autoStart = true; 19 | volumes = [ 20 | "config:/config" 21 | ]; 22 | }; 23 | /* 24 | services.grocy = { 25 | enable = true; 26 | hostName = "0.0.0.0"; 27 | settings = { 28 | currency = "EUR"; 29 | culture = "de"; 30 | calendar = { 31 | firstDayOfWeek = 1; 32 | }; 33 | }; 34 | }; 35 | */ 36 | networking.firewall.allowedTCPPorts = [9283]; 37 | networking.firewall.allowedUDPPorts = [9283]; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /nix/modules/nixos/haskell.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | cabal-install 10 | ghc 11 | haskell-language-server 12 | ]; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nix/modules/nixos/java.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = [ 9 | # pkgs.jdt-language-server 10 | pkgs.openjdk 11 | pkgs.openjdk11 12 | pkgs.openjdk8 13 | (pkgs.writeShellScriptBin "jdtls" "${pkgs.jdt-language-server}/bin/jdt-language-server $@") 14 | ]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/modules/nixos/javascript.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | nodePackages.npm 10 | nodePackages.typescript-language-server 11 | # nodePackages.parcel 12 | stable.nodejs 13 | yarn 14 | ]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/modules/nixos/jellyfin.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | services.jellyfin.enable = true; 9 | networking.firewall.allowedTCPPorts = [8096]; 10 | networking.firewall.allowedUDPPorts = [8096]; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/modules/nixos/latex.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | texlive.combined.scheme-full 10 | texlab 11 | # ltex-ls-plus 12 | ]; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nix/modules/nixos/lua.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | lua 10 | luajit 11 | sumneko-lua-language-server 12 | ]; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nix/modules/nixos/math.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | # ./neovim.nix 4 | ./zsh.nix 5 | ]; 6 | 7 | options = {}; 8 | 9 | config = { 10 | environment.systemPackages = with pkgs; [ 11 | libqalculate # qalc cli 12 | stable.sage 13 | sagetex 14 | typst 15 | typstfmt 16 | typst-live 17 | typstyle 18 | tinymist 19 | websocat 20 | stable.typst-preview 21 | numbat 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /nix/modules/nixos/neovim.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | neovim 10 | luajitPackages.luarocks 11 | # tree-sitter 12 | # tree-sitter-grammars.tree-sitter-norg 13 | ]; 14 | programs.neovim = { 15 | enable = true; 16 | withRuby = true; 17 | withPython3 = true; 18 | withNodeJs = true; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /nix/modules/nixos/networking.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | iwd 10 | iwgtk 11 | nmap 12 | wpa_supplicant_gui 13 | wireguard-tools 14 | openconnect # VPN client compatible with anyconnect protocol 15 | networkmanagerapplet 16 | ]; 17 | networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. 18 | # networking.networkmanager.wifi.backend = "iwd"; 19 | programs.nm-applet.enable = true; 20 | networking.nftables.enable = true; 21 | networking.firewall = { 22 | enable = true; 23 | allowedTCPPorts = [22 30021]; 24 | }; 25 | networking.wireless.userControlled.enable = true; 26 | # networking.wireless.enable = true; 27 | networking.wireless.extraConfig = '' 28 | 29 | ''; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /nix/modules/nixos/nix.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | alejandra 10 | nil 11 | ]; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /nix/modules/nixos/nvidia.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | services.xserver.videoDrivers = ["nvidia"]; 9 | hardware.opengl.enable = true; 10 | hardware.nvidia.modesetting.enable = true; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/modules/nixos/ocaml.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | ocaml 10 | opam 11 | dune_3 12 | ocamlPackages.odoc 13 | ocamlPackages.ocaml-lsp 14 | ocamlPackages.utop 15 | ocamlPackages.ocamlformat 16 | ]; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /nix/modules/nixos/open-rgb.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | openrgb 10 | ]; 11 | services.udev.extraRules = builtins.readFile "${pkgs.openrgb}/lib/udev/rules.d/60-openrgb.rules"; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /nix/modules/nixos/pandoc.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: let 2 | system = pkgs.system; 3 | 4 | pkgs_pandoc = import (builtins.fetchGit { 5 | name = "pandoc-2.13"; 6 | url = "https://github.com/NixOS/nixpkgs/"; 7 | ref = "refs/heads/nixpkgs-unstable"; 8 | rev = "141439f6f11537ee349a58aaf97a5a5fc072365c"; 9 | }) {inherit system;}; 10 | # wrapper = pkgs_pandoc.lib.makeOverridable ({ } : 11 | # pkgs.symlinkJoin { 12 | # name = "pandoc"; 13 | # paths = [ pkgs_pandoc.pandoc ]; 14 | # buildInputs = [ pkgs.makeWrapper ]; 15 | # postBuild = '' 16 | # wrapProgram "$out/bin/pandoc" --add-flags "--data-dir=/run/current-system/sw/share/pandoc/" 17 | # ''; 18 | # }); 19 | in { 20 | imports = [ 21 | ]; 22 | 23 | options = {}; 24 | 25 | config = { 26 | environment.systemPackages = [ 27 | pkgs_pandoc.pandoc 28 | pkgs_pandoc.haskellPackages.pandoc-crossref 29 | pkgs_pandoc.haskellPackages.pandoc-include-code 30 | pkgs.texlive.combined.scheme-full 31 | pkgs.dasel 32 | pkgs.m4 33 | ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /nix/modules/nixos/pix2tex.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | (callPackage stdenv.mkDerivation { 10 | name = "pix2tex"; 11 | src = pkgs.writeShellScriptBin "pix2tex" '' 12 | ${pkgs.sway-contrib.grimshot}/bin/grimshot save area /tmp/pix2tex_screenshot.png && ${pkgs.curl}/bin/curl -s -X POST -F "file=@/tmp/pix2tex_screenshot.png" -L http://127.0.0.1:8502/predict | ${pkgs.jq}/bin/jq -r | ${pkgs.wl-clipboard}/bin/wl-copy 13 | ''; 14 | installPhase = '' 15 | mkdir -p $out/bin 16 | cp $src/bin/pix2tex $out/bin/pix2tex 17 | chmod +x $out/bin/pix2tex 18 | ''; 19 | }) 20 | ]; 21 | virtualisation.oci-containers.containers.pix2tex = { 22 | image = "lukasblecher/pix2tex"; 23 | ports = ["8502:8502"]; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /nix/modules/nixos/postgres.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | postgresql 10 | pr229184.pgadmin 11 | ]; 12 | services.postgresql = { 13 | package = pkgs.postgresql; 14 | }; 15 | # services.pgadmin = { 16 | # enable = true; 17 | # initialEmail = "b3nj4m1n@gmx.net"; 18 | # initialPasswordFile = let 19 | # pw_file = pkgs.writeTextFile { 20 | # name = "pgadmin-password"; 21 | # text = '' 22 | # 123456 23 | # ''; 24 | # }; 25 | # in "${pw_file}"; 26 | # }; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /nix/modules/nixos/python.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | python3 10 | python312Packages.jedi-language-server 11 | python312Packages.python-lsp-server 12 | poetry 13 | pipx 14 | python311Packages.bpython 15 | ]; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /nix/modules/nixos/radicale.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | ]; 10 | services.radicale = { 11 | enable = true; 12 | settings = { 13 | server = { 14 | hosts = ["0.0.0.0:5232" "[::]:5232"]; 15 | }; 16 | storage = { 17 | filesystem_folder = "/var/lib/radicale/collections"; 18 | }; 19 | auth = { 20 | type = "none"; 21 | # htpasswd_filename = "/etc/radicale/users"; 22 | # htpasswd_encryption = "bcrypt"; 23 | }; 24 | }; 25 | }; 26 | networking.firewall.allowedTCPPorts = [5232]; 27 | networking.firewall.allowedUDPPorts = [5232]; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /nix/modules/nixos/rust.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | # (fenix.complete.withComponents [ 10 | # "cargo" 11 | # "clippy" 12 | # "rust-src" 13 | # "rustc" 14 | # "rustfmt" 15 | # ]) 16 | rust-toolchain 17 | rust-analyzer-nightly 18 | cargo-nextest 19 | cargo-expand 20 | cargo-watch 21 | cargo-audit 22 | sqlx-cli 23 | ]; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /nix/modules/nixos/security.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | keychain 10 | libfido2 11 | # yubikey-manager # TODO 12 | pinentry 13 | pinentry-curses 14 | pinentry-gtk2 15 | polkit_gnome 16 | dbus 17 | ]; 18 | security.polkit.enable = true; 19 | systemd = { 20 | user.services.polkit-gnome-authentication-agent-1 = { 21 | description = "polkit-gnome-authentication-agent-1"; 22 | wantedBy = ["graphical-session.target"]; 23 | wants = ["graphical-session.target"]; 24 | after = ["graphical-session.target"]; 25 | serviceConfig = { 26 | Type = "simple"; 27 | ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; 28 | Restart = "on-failure"; 29 | RestartSec = 1; 30 | TimeoutStopSec = 10; 31 | }; 32 | }; 33 | }; 34 | services.pcscd.enable = true; 35 | programs.gnupg.agent = { 36 | enable = true; 37 | enableSSHSupport = true; 38 | pinentryPackage = pkgs.pinentry-gtk2; 39 | }; 40 | services.openssh = { 41 | enable = true; 42 | settings = { 43 | PermitRootLogin = "no"; 44 | PasswordAuthentication = false; 45 | }; 46 | }; 47 | services.dbus = { 48 | enable = true; 49 | implementation = "broker"; 50 | }; 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /nix/modules/nixos/shared-repos.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | # This requires read-only deployment keys to be set up for the relevant repositories 9 | systemd.services.setupRepos = { 10 | enable = true; 11 | description = "Automatically pull down some repositories"; 12 | path = [pkgs.git pkgs.openssh]; 13 | unitConfig = { 14 | Type = "simple"; 15 | After = ["network-online.target"]; 16 | Wants = ["network-online.target"]; 17 | }; 18 | serviceConfig = { 19 | User = "b3nj4m1n"; 20 | ExecStart = "-${pkgs.bash}/bin/bash /home/b3nj4m1n/.local/share/bin/setup-repos.sh"; 21 | }; 22 | wantedBy = ["multi-user.target"]; 23 | }; 24 | 25 | services.cron = { 26 | enable = true; 27 | systemCronJobs = [ 28 | "10 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/task true" 29 | "42 17 * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/task false" 30 | 31 | "11 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/timew/data true" 32 | "43 17 * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/timew/data false" 33 | 34 | "12 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/backup_sh_history.sh /home/b3nj4m1n/.local/share/sh_history/history true" 35 | "44 17 * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/backup_sh_history.sh /home/b3nj4m1n/.local/share/sh_history/history false" 36 | 37 | "13 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/logseq true" 38 | "45 17 * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/logseq false" 39 | 40 | "14 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/Zotero true" 41 | "46 17 * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/Zotero false" 42 | 43 | "01 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/uni/get-current.sh" 44 | "*/5 * * * * b3nj4m1n /usr/bin/env sh /home/b3nj4m1n/uni/get-current.sh" 45 | ]; 46 | }; 47 | }; 48 | } 49 | -------------------------------------------------------------------------------- /nix/modules/nixos/shell.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | # ./neovim.nix 4 | ./zsh.nix 5 | ]; 6 | 7 | options = {}; 8 | 9 | config = { 10 | environment.systemPackages = with pkgs; [ 11 | aria # Basically a better wget 12 | atuin # Save & search shell history 13 | bat # Better cat (syntax highlighting, etc.) 14 | bottom # System monitor 15 | cmatrix # A masterhacker essential 16 | difftastic # Better diff which understands syntax 17 | direnv # Automatically load env variables when entering directory 18 | doctl # Digital ocean cli 19 | dotter # Dotfile management 20 | du-dust # More intuitive du 21 | duf # Display disk usage stats in a readable way 22 | eza # Better ls 23 | fd # Better find 24 | ffmpeg-full # Video (& audio) transcoding, scaling, etc. 25 | figlet # Almost as important as toilet 26 | file # Get information about what kind of file you're looking at 27 | git # I mean it's git 28 | git-crypt # Encrypt files when pushing repos, decrypt when pulling 29 | glow # Render markdown in the terminal 30 | gnumake # You know make 31 | helix # Like neovim but less config 32 | hexdino # Hex editor 33 | hexyl # View binary files 34 | hyperfine # Benchmark command performance 35 | inotify-tools # Watch for file changes 36 | jq # Jesus christ it's JSON Bourne 37 | just # Like make but easier 38 | killall # Kill processes by name 39 | libqalculate # qalc cli 40 | mlocate # Locate files quickly from cached database of files 41 | mmv-go # Rename files using $EDITOR 42 | neomutt # TUI email client 43 | parallel # GNU parallel 44 | pfetch # Like neofetch but faster and more minimal 45 | stable.pmount # Easier mounting 46 | progress # Show progress bar for coreutils 47 | rage # Rust version of age (actually good encryption) 48 | rclone 49 | ripgrep # Very fast grep, searches directory recursively by default 50 | sd # Move intuitive sed 51 | skim # Like fzf, but in rust... yeah that's the only reason 52 | smartmontools # Monitor S.M.A.R.T. values 53 | sops # Secret management 54 | sqlite # Sqlite cli 55 | starship # Fast af prompt generator with tons of useful info 56 | taplo # Like jq for toml 57 | taskwarrior3 # The endboss of task management 58 | tealdeer # tldr client 59 | timewarrior # Companion to taskwarrior which I still have not set up properly 60 | tmux # Tabs, panes, sessions, etc. 61 | toilet # Almost as important as figlet 62 | tokei # Get LOC stats for a directory 63 | unzip # Unzips zips 64 | wget # You know this one 65 | xplr # TUI file explorer 66 | yt-dlp # Download youtube videos 67 | zellij # Sort of a little bit like tmux 68 | zoxide # More modern version of z (remember directories, cd into them without specifying full path) 69 | zstd # Compression 70 | ]; 71 | }; 72 | } 73 | -------------------------------------------------------------------------------- /nix/modules/nixos/steam.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | programs.steam = { 9 | enable = true; 10 | remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play 11 | dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server 12 | }; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nix/modules/nixos/sway.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./wayland.nix 4 | ./dynamic-wallpaper.nix 5 | ./swaylock-plugin.nix 6 | ]; 7 | 8 | options = {}; 9 | 10 | config = { 11 | environment.systemPackages = with pkgs; [ 12 | swaylock-effects 13 | autotiling-rs 14 | sway-contrib.grimshot 15 | ]; 16 | services.dynamic-wallpaper = { 17 | enable = true; 18 | theme = "tokyo"; 19 | transitionDuration = 10; 20 | }; 21 | services.swaylock-plugin = { 22 | enable = true; 23 | }; 24 | programs.sway.enable = true; 25 | services.displayManager.defaultSession = "sway"; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /nix/modules/nixos/swaylock-plugin.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | lib, 5 | ... 6 | }: 7 | with lib; let 8 | cfg = config.services.swaylock-plugin; 9 | in { 10 | imports = [ 11 | ]; 12 | 13 | options.services.swaylock-plugin = { 14 | enable = mkEnableOption "swaylock-plugin"; 15 | }; 16 | 17 | config = { 18 | environment.systemPackages = with pkgs; [ 19 | pkgs.swaylock-plugin 20 | swaybg 21 | mpvpaper 22 | ]; 23 | security.pam.services.swaylock-plugin.text = "auth include login"; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /nix/modules/nixos/terminal.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./shell.nix 4 | ]; 5 | 6 | options = {}; 7 | 8 | config = { 9 | environment.systemPackages = with pkgs; [ 10 | alacritty 11 | devour 12 | wezterm 13 | ]; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /nix/modules/nixos/tree-sitter.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: let 2 | system = pkgs.system; 3 | 4 | pkgs_treesitter = import (builtins.fetchTarball { 5 | url = "https://github.com/mrene/nixpkgs/archive/refs/heads/tree-sitter-wrapper-test.tar.gz"; 6 | sha256 = "sha256:0a3lkl75cw58mma780wcbi9xx4v14m9in9n9scdva1mpalbi69yg"; 7 | }) {inherit system;}; 8 | in { 9 | imports = [ 10 | ]; 11 | 12 | options = {}; 13 | 14 | config = { 15 | environment.systemPackages = [ 16 | pkgs_treesitter.tree-sitter.withAllGrammarSources 17 | ]; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /nix/modules/nixos/typescript.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./javascript.nix 4 | ]; 5 | 6 | options = {}; 7 | 8 | config = { 9 | environment.systemPackages = with pkgs; [ 10 | deno 11 | nodePackages.typescript 12 | nodePackages.typescript-language-server 13 | # nodePackages.parcel 14 | ]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/modules/nixos/ulauncher.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: { 6 | imports = [ 7 | ]; 8 | 9 | options = {}; 10 | 11 | config = { 12 | environment.systemPackages = with pkgs; [ 13 | ulauncher 14 | tlp 15 | # (pkgs.python3.withPackages (ps: with ps; [google])) 16 | ]; 17 | /* 18 | systemd.user.services."ulauncher" = { 19 | unitConfig = { 20 | "Description" = "Ulauncher"; 21 | }; 22 | serviceConfig = { 23 | Type = "oneshot"; 24 | ExecStart = "${pkgs.ulauncher}/bin/ulauncher --hide-window"; 25 | }; 26 | }; 27 | */ 28 | systemd.user.services."ulauncher" = { 29 | unitConfig = { 30 | "Description" = "Linux Application Launcher"; 31 | "Documentation" = ["https://ulauncher.io/"]; 32 | }; 33 | environment = let 34 | /* 35 | wrapt-timeout-decorator = ps: 36 | with ps; [ 37 | ( 38 | buildPythonPackage rec { 39 | pname = "wrapt_timeout_decorator"; 40 | version = "1.4.0"; 41 | src = fetchPypi { 42 | inherit pname version; 43 | sha256 = ""; 44 | }; 45 | doCheck = false; 46 | propagatedBuildInputs = [ 47 | # pkgs.python3Packages.numpy 48 | ]; 49 | } 50 | ) 51 | ]; 52 | */ 53 | pydeps = pkgs.python3.withPackages (pp: 54 | with pp; [ 55 | google 56 | pytz # https://github.com/tchar/ulauncher-albert-calculate-anything 57 | pint # https://github.com/tchar/ulauncher-albert-calculate-anything 58 | requests # https://github.com/tchar/ulauncher-albert-calculate-anything 59 | parsedatetime # https://github.com/tchar/ulauncher-albert-calculate-anything 60 | google-api-python-client # https://github.com/Carlosmape/ulauncher-calendar/blob/master/requirements.txt 61 | google-auth-oauthlib # https://github.com/Carlosmape/ulauncher-calendar/blob/master/requirements.txt 62 | pydbus 63 | pygobject3 64 | # (wrapt-timeout-decorator pp) 65 | ]); 66 | pydeps_stable = pkgs.stable.python3.withPackages (pp: 67 | with pp; [ 68 | simpleeval # https://github.com/tchar/ulauncher-albert-calculate-anything 69 | ]); 70 | in { 71 | PYTHONPATH = "${pydeps}/${pydeps.sitePackages}:${pydeps_stable}/${pydeps_stable.sitePackages}"; 72 | }; 73 | serviceConfig = { 74 | Type = "simple"; 75 | Restart = "always"; 76 | RestartSec = 1; 77 | ExecStart = pkgs.writeShellScript "ulauncher-env-wrapper.sh" '' 78 | export PATH="''${XDG_BIN_HOME}:$HOME/.nix-profile/bin:/etc/profiles/per-user/$USER/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin" 79 | export GDK_BACKEND=x11 80 | exec ${pkgs.ulauncher}/bin/ulauncher --hide-window 81 | ''; 82 | }; 83 | }; 84 | }; 85 | } 86 | -------------------------------------------------------------------------------- /nix/modules/nixos/virtual-machines.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | # qemu_full 10 | virt-manager 11 | virt-viewer 12 | dnsmasq 13 | vde2 14 | bridge-utils 15 | netcat-openbsd 16 | libguestfs 17 | ]; 18 | virtualisation.libvirtd.enable = true; 19 | programs.dconf.enable = true; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /nix/modules/nixos/wayland.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: { 6 | imports = [ 7 | ./desktop.nix 8 | ./ulauncher.nix 9 | ]; 10 | 11 | options = {}; 12 | 13 | config = { 14 | environment.systemPackages = with pkgs; [ 15 | cliphist 16 | eww 17 | kanshi 18 | tofi 19 | wayland 20 | wev 21 | wl-clipboard 22 | wlr-randr 23 | wlprop 24 | wofi 25 | ]; 26 | hardware.brillo.enable = true; 27 | services.dbus.enable = true; 28 | security.pam.services.swaylock = {}; 29 | xdg.portal = { 30 | enable = true; 31 | wlr.enable = true; 32 | # lxqt.enable = true; 33 | extraPortals = [pkgs.xdg-desktop-portal-gtk]; 34 | # extraPortals = with pkgs; [ 35 | # xdg-desktop-portal-wlr 36 | # xdg-desktop-portal-gtk 37 | # ]; 38 | }; 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /nix/modules/nixos/webdev.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./javascript.nix 4 | ./typescript.nix 5 | ./elm.nix 6 | ]; 7 | 8 | options = {}; 9 | 10 | config = { 11 | environment.systemPackages = with pkgs; [ 12 | /* 13 | nodePackages.vscode-css-languageserver-bin 14 | nodePackages.vscode-html-languageserver-bin 15 | */ 16 | vscode-langservers-extracted 17 | ]; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /nix/modules/nixos/zsh.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ]; 4 | 5 | options = {}; 6 | 7 | config = { 8 | environment.systemPackages = with pkgs; [ 9 | zsh 10 | zsh-syntax-highlighting 11 | ]; 12 | environment.shells = with pkgs; [zsh]; 13 | programs.zsh.enable = true; 14 | users.defaultUserShell = pkgs.zsh; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/nixpkgs.nix: -------------------------------------------------------------------------------- 1 | # A nixpkgs instance that is grabbed from the pinned nixpkgs commit in the lock file 2 | # This is useful to avoid using channels when using legacy nix commands 3 | let 4 | lock = (builtins.fromJSON (builtins.readFile ./flake.lock)).nodes.nixpkgs.locked; 5 | in 6 | import (fetchTarball { 7 | url = "https://github.com/nixos/nixpkgs/archive/${lock.rev}.tar.gz"; 8 | sha256 = lock.narHash; 9 | }) 10 | -------------------------------------------------------------------------------- /nix/pkgs/aria_ng/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | fetchzip, 8 | }: 9 | stdenv.mkDerivation rec { 10 | pname = "aria_ng"; 11 | version = "1.3.4"; 12 | 13 | src = fetchzip { 14 | url = "https://github.com/mayswind/AriaNg/releases/download/${version}/AriaNg-${version}.zip"; 15 | sha256 = "sha256-JTJ/PAgpuMGIIBBqiCkWFcFu7a7GVpBvJ/HoRF+NGAk="; 16 | stripRoot = false; 17 | }; 18 | 19 | nativeBuildInputs = with pkgs; []; 20 | 21 | installPhase = '' 22 | runHook preInstall 23 | mkdir -p "$out" 24 | cp -r * "$out/" 25 | runHook postInstall 26 | ''; 27 | } 28 | -------------------------------------------------------------------------------- /nix/pkgs/bemoji/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenvNoCC, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | }: 8 | stdenvNoCC.mkDerivation rec { 9 | pname = "bemoji"; 10 | version = "0.3.0"; 11 | 12 | src = fetchFromGitHub { 13 | owner = "marty-oehme"; 14 | repo = pname; 15 | rev = version; 16 | sha256 = "sha256-XXNrUaS06UHF3cVfIfWjGF1sdPE709W2tFhfwTitzNs="; 17 | }; 18 | 19 | nativeBuildInputs = with pkgs; [makeWrapper wofi wl-clipboard wtype]; 20 | 21 | installPhase = '' 22 | runHook preInstall 23 | install -Dm755 bemoji "$out/share/bemoji/bemoji.sh" 24 | install -Dm644 assets/* -t "$out/share/bemoji/assets" 25 | 26 | mkdir -p "$out/bin" 27 | ln -s "$out/share/bemoji/bemoji.sh" "$out/bin/bemoji" 28 | wrapProgram "$out/bin/bemoji" \ 29 | --prefix PATH : "${lib.makeBinPath (with pkgs; [wofi wl-clipboard wtype])}" 30 | 31 | runHook postInstall 32 | ''; 33 | } 34 | -------------------------------------------------------------------------------- /nix/pkgs/default.nix: -------------------------------------------------------------------------------- 1 | # Custom packages, that can be defined similarly to ones from nixpkgs 2 | # You can build them using 'nix build .#example' or (legacy) 'nix-build -A example' 3 | { 4 | pkgs ? (import ../nixpkgs.nix) {}, 5 | system, 6 | fenix, 7 | pfui, 8 | ghostty, 9 | }: { 10 | # fenix = import fenix {inherit system;}; 11 | rust-toolchain = fenix.packages.${system}.stable.toolchain; 12 | rust-analyzer-nightly = fenix.packages.${system}.stable.rust-analyzer; 13 | pfui = pfui.defaultPackage.${system}; 14 | ghostty = ghostty.packages.${system}.default; 15 | eisvogel = pkgs.callPackage ./eisvogel {}; 16 | # logseq-wrapped = pkgs.callPackage ./logseq-wrapped {}; 17 | # logseq-wrapped = if system == "x86_64-linux" then pkgs.callPackage ./logseq-wrapped {} else null; 18 | # logseq-wrapped = lib.optional (system == "x86_64-linux") (pkgs.callPackage ./logseq-wrapped {}); 19 | bemoji = pkgs.callPackage ./bemoji {}; 20 | wofi-calc = pkgs.callPackage ./wofi-calc {}; 21 | # tree-sitter-grammar = { 22 | # norg = pkgs.callPackage ./tree-sitter-grammar { 23 | # lang-name = "norg"; 24 | # repo-owner = "nvim-neorg"; 25 | # repo-name = "tree-sitter-norg"; 26 | # repo-version = "0.1.0"; 27 | # repo-rev = "dfac5ad2740a79b18ae849590a924e7bad3f1b23"; 28 | # repo-sha = "sha256-nH9Y2mYXRehqvq0kp1DkoI2dIAaCidFAxlKos8wZmks="; 29 | # }; 30 | # }; 31 | aria_ng = pkgs.callPackage ./aria_ng {}; 32 | dynamic-wallpapers = pkgs.callPackage ./dynamic-wallpapers {}; 33 | homepage = pkgs.callPackage ./homepage {}; 34 | fennel-language-server = pkgs.callPackage ./fennel-language-server {}; 35 | swaylock-plugin = pkgs.callPackage ./swaylock-plugin {}; 36 | ltex-nightly = pkgs.callPackage ./ltex-nightly {}; 37 | } 38 | -------------------------------------------------------------------------------- /nix/pkgs/dynamic-wallpapers/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | fetchzip, 8 | }: 9 | stdenv.mkDerivation rec { 10 | pname = "dynamic-wallpapers"; 11 | version = "0.0.1"; 12 | ref = "de6bc647b4a8aa459bbc6dc8fc411569bec7ac44"; 13 | 14 | src = fetchFromGitHub { 15 | owner = "adi1090x"; 16 | repo = "dynamic-wallpaper"; 17 | rev = ref; 18 | sha256 = "sha256-Tq4m4MnUMVt3PzKsWtIp5s01XOv3cs+eW4U8VQZ4OlA="; 19 | }; 20 | # src = fetchzip { 21 | # url = "https://github.com/adi1090x/dynamic-wallpaper/archive/${ref}.zip"; 22 | # sha256 = "sha256-Tq4m4MnUMVt3PzKsWtIp5s01XOv3cs+eW4U8VQZ4OlA="; 23 | # stripRoot = false; 24 | # }; 25 | 26 | nativeBuildInputs = with pkgs; []; 27 | 28 | installPhase = '' 29 | runHook preInstall 30 | ls 31 | mkdir -p "$out" 32 | cp -r ./images "$out/images" 33 | runHook postInstall 34 | ''; 35 | } 36 | -------------------------------------------------------------------------------- /nix/pkgs/eisvogel/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenvNoCC, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | fetchzip, 8 | }: 9 | stdenvNoCC.mkDerivation rec { 10 | pname = "eisvogel"; 11 | version = "2.2.0"; 12 | 13 | # src = fetchFromGitHub { 14 | # owner = "Wandmalfarbe"; 15 | # repo = "pandoc-latex-template"; 16 | # rev = "v${version}"; 17 | # sha256 = "sha256-5/xKGleBuyL+F1l7FnXkDMZT+wcpDve83BeoRkpDt18="; 18 | # }; 19 | src = fetchzip { 20 | url = "https://github.com/Wandmalfarbe/pandoc-latex-template/releases/download/v2.2.0/Eisvogel.tar.gz"; 21 | sha256 = "sha256-rGX4GyPk2HcGfilmtz3l61tF0l3GHCSEhuzFLifrxHU="; 22 | stripRoot = false; 23 | }; 24 | 25 | nativeBuildInputs = with pkgs; []; 26 | 27 | installPhase = '' 28 | runHook preInstall 29 | sed -i 's/pagenumbering{arabic}//g' eisvogel.latex # This makes title page count as page 1 30 | sed -i 's/\\begin{document}/\\begin{document}\n\\pagenumbering{Roman}/g' eisvogel.latex # This makes it use roman numberals for page counting before the main content 31 | install -Dm644 eisvogel.latex "$out/share/pandoc/templates/eisvogel.latex" 32 | runHook postInstall 33 | ''; 34 | } 35 | -------------------------------------------------------------------------------- /nix/pkgs/fennel-language-server/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | pkgs, 4 | fetchFromGitHub, 5 | rustPlatform, 6 | ... 7 | }: 8 | rustPlatform.buildRustPackage rec { 9 | pname = "fennel-language-server"; 10 | version = "0.1.0"; 11 | 12 | src = fetchFromGitHub { 13 | owner = "rydesun"; 14 | repo = pname; 15 | rev = "d0c65db2ef43fd56390db14c422983040b41dd9c"; 16 | hash = "sha256-KU2MPmgHOS/WesBzCmEoHHXHoDWCyqjy49tmMmZw5BQ="; 17 | }; 18 | 19 | cargoHash = "sha256-yYjs7vwKSTriTjUrvKECDyLWVkN1EMrYuPiI3c5lY5U="; 20 | verifyCargoDeps = true; 21 | } 22 | -------------------------------------------------------------------------------- /nix/pkgs/firefox-trapped/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | pkgs, 4 | }: 5 | stdenv.mkDerivation { 6 | name = "firefox-trapped"; 7 | version = "1.0"; 8 | 9 | buildInputs = with pkgs; [ 10 | stable.firefox-bin 11 | ]; 12 | 13 | src = pkgs.writeShellScriptBin "firefox-trapper.sh" '' 14 | systemd-run --user --scope -p MemoryLimit=8G -p MemorySwapMax=0 ${pkgs.stable.firefox-bin}/bin/firefox &! 15 | ''; 16 | 17 | installPhase = '' 18 | mkdir -p $out/bin 19 | cp $src/bin/firefox-trapper.sh $out/bin/firefox 20 | chmod +x $out/bin/firefox 21 | cp -r ${pkgs.stable.firefox-bin}/share $out/ 22 | # cp -r ${pkgs.stable.firefox-bin}/lib $out/ 23 | ''; 24 | 25 | meta = { 26 | conflicts = [{name = "firefox";} {name = "firefox-bin";}]; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /nix/pkgs/homepage/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | fetchzip, 8 | }: 9 | pkgs.buildNpmPackage rec { 10 | pname = "homepage"; 11 | version = "0.6.16"; 12 | 13 | # src = ./.; 14 | # src = fetchzip { 15 | # url = "https://github.com/benphelps/homepage/archive/refs/tags/v0.6.16.tar.gz"; 16 | # sha256 = "sha256-CUq1nTyQK84pKbj1pQfW0m+8kuABWnE0DyaJr0DhxEk="; 17 | # # stripRoot = false; 18 | # }; 19 | src = fetchFromGitHub { 20 | owner = "benphelps"; 21 | repo = pname; 22 | rev = "v${version}"; 23 | sha256 = "sha256-38ISnMxov7tZ6TeTZ+yDrFcKE289rwaR1VABKF+J++g="; 24 | }; 25 | 26 | nativeBuildInputs = with pkgs; [python39]; 27 | 28 | npmDepsHash = "sha256-O6SQYx5vxscMsbWv0ynUYqdUkOp/nMtdvlZ/Mp95sBY="; 29 | 30 | # The prepack script runs the build script, which we'd rather do in the build phase. 31 | npmPackFlags = ["--ignore-scripts"]; 32 | 33 | NODE_OPTIONS = "--openssl-legacy-provider"; 34 | 35 | preBuild = '' 36 | mkdir -p config 37 | ''; 38 | 39 | installPhase = '' 40 | mkdir -p $out/share/homepage/config/logs 41 | cp -r ./.next/standalone/. $out/share/homepage/ 42 | cp -r ./src/skeleton/* $out/share/homepage/config/ 43 | cp -r ./.next/static/ $out/share/homepage/.next/ 44 | touch $out/share/homepage/config/logs/homepage.log 45 | ''; 46 | } 47 | -------------------------------------------------------------------------------- /nix/pkgs/logseq-wrapped/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | pkgs, 4 | }: 5 | stdenv.mkDerivation { 6 | name = "logseq-wrapped"; 7 | version = "1.0"; 8 | 9 | buildInputs = with pkgs; [ 10 | logseq 11 | libnotify 12 | ]; 13 | 14 | src = pkgs.writeShellScriptBin "logseq-wrapper.sh" '' 15 | ${pkgs.libnotify}/bin/notify-send "Logseq" "Syncing logseq database"; 16 | /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/logseq false 17 | ${pkgs.logseq}/bin/logseq 18 | ${pkgs.libnotify}/bin/notify-send "Logseq" "Syncing logseq database"; 19 | /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/.local/share/logseq false 20 | ''; 21 | 22 | installPhase = '' 23 | mkdir -p $out/bin 24 | cp $src/bin/logseq-wrapper.sh $out/bin/logseq 25 | chmod +x $out/bin/logseq 26 | cp -r ${pkgs.logseq}/share $out/ 27 | ''; 28 | 29 | meta = { 30 | conflicts = [{name = "logseq";}]; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /nix/pkgs/ltex-nightly/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenvNoCC, 4 | fetchurl, 5 | fetchzip, 6 | makeBinaryWrapper, 7 | jre_headless, 8 | unzip, 9 | tree, 10 | }: 11 | stdenvNoCC.mkDerivation rec { 12 | pname = "ltex-nightly"; 13 | version = "15.5.0-alpha.nightly.2025-04-04"; 14 | 15 | src = fetchurl { 16 | url = "https://github.com/ltex-plus/vscode-ltex-plus/releases/download/nightly/vscode-ltex-plus-${version}-offline-linux-aarch64.vsix"; 17 | sha256 = "sha256-SLawFwnZsZ8cDhYmP9sE/W+clw7jadNavPS+verDFsQ="; 18 | }; 19 | 20 | nativeBuildInputs = [makeBinaryWrapper unzip tree]; 21 | phases = ["installPhase"]; # Removes all phases except installPhase 22 | 23 | installPhase = '' 24 | runHook preInstall 25 | cp $src . 26 | tree 27 | unzip *-vscode-ltex-plus-${version}-offline-linux-aarch64.vsix 28 | tree 29 | 30 | cd extension/lib/ltex-ls-plus-18.5.0-alpha.nightly.2025-04-04 31 | mkdir -p $out 32 | cp -rfv bin/ lib/ $out 33 | rm -fv $out/bin/.lsp-cli.json $out/bin/*.bat 34 | for file in $out/bin/{ltex-ls-plus,ltex-cli-plus}; do 35 | wrapProgram $file --set JAVA_HOME "${jre_headless}" 36 | done 37 | 38 | runHook postInstall 39 | ''; 40 | 41 | meta = let 42 | inherit (lib) licenses maintainers; 43 | in { 44 | homepage = "https://ltex-plus.github.io/ltex-plus/"; 45 | description = "LSP language server for LanguageTool"; 46 | license = licenses.mpl20; 47 | mainProgram = "ltex-cli-plus"; 48 | maintainers = [maintainers.FirelightFlagboy]; 49 | platforms = jre_headless.meta.platforms; 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /nix/pkgs/pfui/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | pkgs, 4 | fetchFromGitHub, 5 | rustPlatform, 6 | ... 7 | }: let 8 | libPath = with pkgs; 9 | lib.makeLibraryPath [ 10 | libpulseaudio 11 | ]; 12 | in 13 | rustPlatform.buildRustPackage rec { 14 | pname = "pfui"; 15 | version = "0.1.0"; 16 | 17 | src = fetchFromGitHub { 18 | owner = "b3nj5m1n"; 19 | repo = pname; 20 | rev = version; 21 | hash = "sha256-SeTEGq0R3TthHbxC2/mZAk/Kvgjt13l7sw1tcje7Wxg="; 22 | }; 23 | 24 | cargoHash = "sha256-T3EBNvTifHbn5Lh4owMlqpUSoL6vXLBVRbhHPzjBb0M="; 25 | verifyCargoDeps = true; 26 | 27 | nativeBuildInputs = [pkgs.makeWrapper]; 28 | buildInputs = with pkgs; [ 29 | libpulseaudio 30 | ]; 31 | LD_LIBRARY_PATH = libPath; 32 | 33 | preConfigure = '' 34 | export HOME=$(mktemp -d) 35 | ''; 36 | postInstall = '' 37 | wrapProgram "$out/bin/pfui" --prefix LD_LIBRARY_PATH : "${libPath}" 38 | ''; 39 | } 40 | -------------------------------------------------------------------------------- /nix/pkgs/swaylock-plugin/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | fetchzip, 8 | }: 9 | stdenv.mkDerivation rec { 10 | pname = "swaylock-plugin"; 11 | version = "0.0.1"; 12 | ref = "9a267f3e4570edf4b2e52f35dec233e5922475d0"; 13 | 14 | src = fetchFromGitHub { 15 | owner = "mstoeckl"; 16 | repo = "swaylock-plugin"; 17 | rev = ref; 18 | sha256 = "sha256-Fl2XbRkapXGLSP5lX3pDOhjpA7Pc9Ht4VJuZCtIrubE="; 19 | }; 20 | 21 | nativeBuildInputs = with pkgs; [meson wayland wayland-protocols wayland-scanner libxkbcommon cairo gdk-pixbuf pam pkg-config ninja scdoc]; 22 | 23 | mesonFlags = [ 24 | "-Dpam=enabled" 25 | "-Dgdk-pixbuf=enabled" 26 | "-Dman-pages=enabled" 27 | ]; 28 | 29 | /* 30 | installPhase = '' 31 | runHook preInstall 32 | mkdir -p "$out/bin" 33 | mkdir -p "$out/etc/pam.d" 34 | cp ./swaylock-plugin "$out/bin/" 35 | echo "auth include login" > "$out/etc/pam.d/swaylock-plugin" 36 | runHook postInstall 37 | ''; 38 | */ 39 | } 40 | -------------------------------------------------------------------------------- /nix/pkgs/tree-sitter-grammar/default.nix: -------------------------------------------------------------------------------- 1 | # This will put the generated parser in /run/current-system/sw/share/ts-grammars 2 | # I tried to make this generic but it will probably only work for neorg without some extra work 3 | { 4 | lang-name, 5 | repo-owner, 6 | repo-name, 7 | repo-version, 8 | repo-rev, 9 | repo-sha, 10 | lib, 11 | stdenvNoCC, 12 | fetchFromGitHub, 13 | makeWrapper, 14 | pkgs, 15 | }: 16 | stdenvNoCC.mkDerivation rec { 17 | pname = repo-name; 18 | version = repo-version; 19 | 20 | src = fetchFromGitHub { 21 | owner = repo-owner; 22 | repo = repo-name; 23 | rev = repo-rev; 24 | sha256 = repo-sha; 25 | }; 26 | 27 | nativeBuildInputs = with pkgs; [tree-sitter nodejs]; 28 | 29 | installPhase = '' 30 | runHook preInstall 31 | install -Dm644 grammar.js -t "$out/share/ts-grammars/${pname}" 32 | install -Dm644 package.json -t "$out/share/ts-grammars/${pname}" 33 | cd $out/share/ts-grammars/${pname} 34 | tree-sitter generate 35 | runHook postInstall 36 | ''; 37 | } 38 | -------------------------------------------------------------------------------- /nix/pkgs/wofi-calc/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenvNoCC, 4 | fetchFromGitHub, 5 | makeWrapper, 6 | pkgs, 7 | }: 8 | stdenvNoCC.mkDerivation rec { 9 | pname = "wofi-calc"; 10 | version = "1.1"; 11 | 12 | src = fetchFromGitHub { 13 | owner = "Zeioth"; 14 | repo = pname; 15 | rev = version; 16 | sha256 = "sha256-TqxlVivyMITB2/sT84ywPwEN54kENBzJ/hQfUeSNTKY="; 17 | }; 18 | 19 | nativeBuildInputs = with pkgs; [makeWrapper wofi libqalculate]; 20 | 21 | installPhase = '' 22 | runHook preInstall 23 | install -Dm755 wofi-calc.sh "$out/share/wofi-calc/wofi-calc.sh" 24 | 25 | mkdir -p "$out/bin" 26 | ln -s "$out/share/wofi-calc/wofi-calc.sh" "$out/bin/wofi-calc" 27 | wrapProgram "$out/bin/wofi-calc" \ 28 | --prefix PATH : "${lib.makeBinPath (with pkgs; [wofi libqalculate])}" 29 | 30 | runHook postInstall 31 | ''; 32 | } 33 | -------------------------------------------------------------------------------- /nix/pkgs/zotero-wrapped/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | pkgs, 4 | }: 5 | stdenv.mkDerivation { 6 | name = "zotero-wrapped"; 7 | version = "1.0"; 8 | 9 | buildInputs = with pkgs; [ 10 | zotero 11 | libnotify 12 | ]; 13 | 14 | src = pkgs.writeShellScriptBin "zotero-wrapper.sh" '' 15 | ${pkgs.libnotify}/bin/notify-send "Zotero" "Syncing zotero database"; 16 | /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/Zotero false 17 | ${pkgs.zotero}/bin/zotero 18 | ${pkgs.libnotify}/bin/notify-send "Zotero" "Syncing zotero database"; 19 | /usr/bin/env sh /home/b3nj4m1n/.local/share/bin/auto_commit.sh /home/b3nj4m1n/Zotero false 20 | ''; 21 | 22 | installPhase = '' 23 | mkdir -p $out/bin 24 | cp $src/bin/zotero-wrapper.sh $out/bin/zotero 25 | chmod +x $out/bin/zotero 26 | cp -r ${pkgs.zotero}/share $out/ 27 | ''; 28 | 29 | meta = { 30 | conflicts = [{name = "zotero";}]; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /nix/shell.nix: -------------------------------------------------------------------------------- 1 | # Shell for bootstrapping flake-enabled nix and home-manager 2 | # You can enter it through 'nix develop' or (legacy) 'nix-shell' 3 | {pkgs ? (import ./nixpkgs.nix) {}}: { 4 | default = pkgs.mkShell { 5 | # Enable experimental features without having to specify the argument 6 | NIX_CONFIG = "experimental-features = nix-command flakes"; 7 | nativeBuildInputs = with pkgs; [nix home-manager git act]; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /scripts/auto_commit.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | # shellcheck disable=SC2015 3 | 4 | # Automatically commit all changes in the given git repository and push 5 | 6 | REPO_DIR="$1" 7 | SILENT="$2" 8 | 9 | NAME="Commitbot" 10 | EMAIL="" 11 | 12 | # ----- ----- ----- Do not change anything below this line ----- ----- ----- # 13 | 14 | unalias -a 15 | 16 | fuckup() { 17 | echo "runnign test" 18 | cd "$REPO_DIR" || exit 1 19 | echo "$PWD" 20 | if git rev-parse --verify -q REBASE_HEAD >/dev/null 2>&1 \ 21 | || git rev-parse --verify -q MERGE_HEAD >/dev/null 2>&1 \ 22 | || [ "$(cd "$REPO_DIR" && git diff --name-only --diff-filter=U --relative | head -c1 | wc -c)" -ne 0 ] \ 23 | ; then 24 | XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send -u "critical" --wait "Something's gone very wrong: $REPO_DIR"& 25 | exit 1 26 | fi 27 | } 28 | fuckup 29 | 30 | notify() { 31 | if [ "$SILENT" != true ]; then 32 | if command -v termux-setup-storage; then 33 | termux-notification -c "$1" 34 | else 35 | XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send "$1" 36 | fi 37 | fi 38 | } 39 | 40 | GIT_COMMITTER_NAME="$NAME" 41 | GIT_COMMITTER_EMAIL="$EMAIL" 42 | 43 | AUTHOR="$NAME <$EMAIL>" 44 | 45 | read -r -d '' MESSAGE << EOM 46 | $(date -u +"%a %d %b %Y %H:%M") [auto commit] 47 | 48 | $(date +%s) 49 | EOM 50 | 51 | eval "$(keychain --dir "$HOME/.cache/keychain" --eval --quiet "{{ ssh_key_name }}")" 52 | 53 | cd "$REPO_DIR" && git pull || notify "Failed pulling $REPO_DIR" 54 | if [ "$(git status --porcelain)" ]; then 55 | cd "$REPO_DIR" && git add --all || notify "Failed staging changes in $REPO_DIR" 56 | cd "$REPO_DIR" && git -c user.name="$GIT_COMMITTER_NAME" -c user.email="$GIT_COMMITTER_EMAIL" commit --no-gpg-sign --author "$AUTHOR" -m "$MESSAGE" || notify "Failed committing changes in $REPO_DIR" 57 | cd "$REPO_DIR" && printf "%s\n" "$SSH_PW" | git push || notify "Failed pushing changes in $REPO_DIR" 58 | fi 59 | fuckup 60 | 61 | notify "Done updating changes in $REPO_DIR" 62 | 63 | date +%s > "/tmp/sync-status-$(echo "$REPO_DIR" | sha256sum | cut -d' ' --fields=1)" 64 | -------------------------------------------------------------------------------- /scripts/autoclick.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i bash -p bash gum 3 | 4 | export YDOTOOL_SOCKET="/tmp/.ydotool_socket" 5 | export SWAYSOCK="/run/user/1000/sway-ipc.1000.25003.sock" 6 | 7 | 8 | # # Initialize a variable to store the PID of the running command 9 | # command_pid="" 10 | 11 | # # Listen to workspace events and toggle the command 12 | # while true; do 13 | # command_pid=$(swaymsg -t subscribe '[ "workspace" ]' | while read -r line; do 14 | # if [ -z "$command_pid" ]; then 15 | # # If command_pid is empty, start the command and store its PID 16 | # ydotool click --repeat 100 --next-delay 25 0xC0 & 17 | # printf "%s" $! 18 | # else 19 | # # If command_pid is not empty, kill the command and reset command_pid 20 | # kill -9 "$command_pid" 21 | # printf "" 22 | # fi 23 | # break 24 | # done &) 25 | # done 26 | 27 | 28 | ydotool click --repeat 1 --next-delay 25 0xC0 & 29 | 30 | sleep 1 31 | 32 | ydotool click --repeat 100000000000 --next-delay 25 0xC0 & 33 | 34 | trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT 35 | swaymsg -t subscribe '[ "workspace" ]' | while read -r line; do 36 | exit 37 | done 38 | -------------------------------------------------------------------------------- /scripts/backup_sh_history.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | BACKUP_FILE="$1" 4 | BACKUP_DIR="$(dirname "$BACKUP_FILE")" 5 | ATUIN_FILE="$HOME/.local/share/atuin/history.db" 6 | 7 | SILENT="$2" 8 | 9 | cd "$BACKUP_DIR" || exit 10 | git pull 11 | 12 | NEW="$( 13 | while read -d $'\x1E' -r row; do 14 | printf "%q\n" "$row" 15 | done < <(sqlite3 -batch -noheader -ascii "$ATUIN_FILE" 'SELECT * FROM history;') 16 | )" 17 | 18 | CURRENT=$(cat "$BACKUP_FILE") 19 | 20 | printf "%s\n%s" "$NEW" "$CURRENT" | sort | uniq > "$BACKUP_FILE" 21 | 22 | "$HOME"/.local/share/bin/auto_commit.sh "$BACKUP_DIR" "$SILENT" 23 | -------------------------------------------------------------------------------- /scripts/bsod.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Creates a blue screen of death when laptop battery needs to be swapped 4 | # Run by systemd unit on a timer (see battery-thing.nix) 5 | 6 | # if [ "$(id -u)" -ne 0 ]; then 7 | # echo "This script must be run as root" 8 | # exit 1 9 | # fi 10 | 11 | # Check if battery level is below 60% 12 | battery_level=$(cat /sys/class/power_supply/BAT0/capacity) 13 | if [ "$battery_level" -gt 50 ]; then 14 | exit 15 | fi 16 | 17 | # Check if battery is discharging 18 | battery_status=$(cat /sys/class/power_supply/BAT0/status) 19 | if [ "$battery_status" != "Discharging" ]; then 20 | exit 21 | fi 22 | 23 | chvt 4 24 | echo -e "\033c" | tee /dev/tty4 25 | 26 | cols=$(stty -F /dev/tty4 size | cut -d' ' -f2) 27 | rows=$(stty -F /dev/tty4 size | cut -d' ' -f1) 28 | 29 | # Turn background blue 30 | printf "\033[44m" | tee /dev/tty4 31 | # Unless the battery is really low, in which case it should be red 32 | if [ "$battery_level" -lt 20 ]; then 33 | echo -e "\033[41m" | tee /dev/tty4 34 | fi 35 | 36 | x="$rows" 37 | y="$cols" 38 | 39 | middle_row=$((x / 2 + 1)) 40 | 41 | for i in $(seq 1 "$x"); do 42 | if [ "$i" -eq "$middle_row" ]; then 43 | text="WARNING: SWAP BATTERY" 44 | padding=$(( (y - ${#text}) / 2 )) 45 | row="" 46 | for j in $(seq 1 "$padding"); do 47 | row="${row} " 48 | done 49 | row="${row}${text}" 50 | printf "%s" "$row" | tee /dev/tty4 51 | else 52 | row="" 53 | for j in $(seq 1 "$y"); do 54 | row="${row} " 55 | done 56 | printf "%s" "$row" | tee /dev/tty4 57 | fi 58 | done 59 | -------------------------------------------------------------------------------- /scripts/bspwm-resize.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | size=${2:-'10'} 4 | dir=$1 5 | 6 | # Find current window mode 7 | is_tiled() { 8 | bspc query -T -n | grep -q '"state":"tiled"' 9 | } 10 | # If the window is floating, move it 11 | if ! is_tiled; then 12 | #only parse input if window is floating,tiled windows accept input as is 13 | case "$dir" in 14 | west) switch="-w" 15 | sign="-" 16 | ;; 17 | east) switch="-w" 18 | sign="+" 19 | ;; 20 | north) switch="-h" 21 | sign="-" 22 | ;; 23 | south) switch="-h" 24 | sign="+" 25 | ;; 26 | esac 27 | xdo resize "${switch}" "${sign}""${size}" 28 | 29 | # Otherwise, window is tiled: switch with window in given direction 30 | else 31 | case "$dir" in 32 | west) bspc node @west -r -"$size" || bspc node @east -r -"${size}" 33 | ;; 34 | east) bspc node @west -r +"$size" || bspc node @east -r +"${size}" 35 | ;; 36 | north) bspc node @south -r -"$size" || bspc node @north -r -"${size}" 37 | ;; 38 | south) bspc node @south -r +"$size" || bspc node @north -r +"${size}" 39 | ;; 40 | esac 41 | fi 42 | -------------------------------------------------------------------------------- /scripts/bspwm-swap-or-move-in.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # By https://github.com/ikn/ 4 | 5 | dir=$1 6 | bspc node -n "${dir}".!automatic || bspc node -s "${dir}" 7 | -------------------------------------------------------------------------------- /scripts/colors.sh: -------------------------------------------------------------------------------- 1 | export RED='\033[0;31m' 2 | export GREEN='\033[0;32m' 3 | export YELLOW='\033[0;33m' 4 | export PURPLE='\033[0;35m' 5 | export LGREEN='\033[1;32m' 6 | export LORANGE='\033[1;33m' 7 | export LBLUE='\033[1;34m' 8 | export LPURPLE='\033[1;35m' 9 | export LCYAN='\033[1;36m' 10 | export NC='\033[0m' 11 | -------------------------------------------------------------------------------- /scripts/cookie_clicker_ascend_loop.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i bash -p bash ydotool 3 | 4 | export YDOTOOL_SOCKET="/tmp/.ydotool_socket" 5 | 6 | buy_all_upgrades() { 7 | # Move to buy all button 8 | ydotool mousemove --absolute -x 865 -y 73 9 | ydotool click 0xC0 10 | reset_upgrade_menu 11 | } 12 | ascend() { 13 | # Move to legacy button 14 | ydotool mousemove --absolute -x 770 -y 40 15 | ydotool click 0xC0 16 | # Move to ascend button 17 | ydotool mousemove --absolute -x 480 -y 305 18 | ydotool click 0xC0 19 | sleep 7 20 | # Move to reincarnate button 21 | ydotool mousemove --absolute -x 480 -y 50 22 | ydotool click 0xC0 23 | # Move to yes button 24 | ydotool mousemove --absolute -x 470 -y 280 25 | ydotool click 0xC0 26 | } 27 | buy_cursors() { 28 | # Move to cursors 29 | ydotool mousemove --absolute -x 865 -y 150 30 | ydotool click --repeat 1 --next-delay 200 0xC0 31 | } 32 | buy_condensors() { 33 | ydotool mousemove --absolute -x 905 -y 530 34 | ydotool click --repeat 1 --next-delay 200 0xC0 35 | } 36 | buy_100() { 37 | ydotool mousemove --absolute -x 905 -y 125 38 | ydotool click 0xC0 39 | } 40 | reset_upgrade_menu() { 41 | sleep 0.1 42 | ydotool mousemove --absolute -x 480 -y 305 43 | sleep 0.2 44 | } 45 | 46 | loop() { 47 | while true 48 | do 49 | buy_all_upgrades 50 | buy_100 51 | buy_cursors 52 | sleep 2 53 | buy_all_upgrades 54 | buy_100 55 | buy_cursors 56 | buy_condensors 57 | buy_all_upgrades 58 | sleep 2 59 | buy_all_upgrades 60 | buy_100 61 | buy_cursors 62 | buy_condensors 63 | buy_all_upgrades 64 | sleep 2 65 | buy_all_upgrades 66 | buy_100 67 | buy_cursors 68 | buy_condensors 69 | buy_all_upgrades 70 | sleep 2 71 | buy_all_upgrades 72 | buy_100 73 | buy_cursors 74 | buy_condensors 75 | buy_all_upgrades 76 | sleep 2 77 | buy_all_upgrades 78 | buy_100 79 | buy_cursors 80 | buy_condensors 81 | buy_all_upgrades 82 | sleep 2 83 | # buy_all_upgrades 84 | # sleep 5 85 | ascend 86 | sleep 1 87 | done 88 | } 89 | loop 90 | -------------------------------------------------------------------------------- /scripts/download_yt_music_favorites.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i bash -p bash gum 3 | 4 | # Downloads youtube music favorites into navidrome compatible file structure 5 | # and saves m3u of playlist 6 | # After running: su, then 7 | # rsync -rauL --info=progress2 . /var/lib/navidrome/music 8 | # then do full scan in navidrome web interface 9 | 10 | BASE_DIRECTORY="." 11 | PlAYLIST_FILE="favs.m3u" 12 | 13 | echo "#EXTM3U" > "$PlAYLIST_FILE" 14 | 15 | start_spinner() { 16 | gum spin --spinner "$2" --title "Downloading $1..." sleep 1000 & 17 | SPIN_PID=$! 18 | } 19 | 20 | stop_spinner() { 21 | kill "$SPIN_PID" 22 | } 23 | 24 | yt-dlp "https://music.youtube.com/playlist?list=LM" \ 25 | --cookies-from-browser firefox \ 26 | -j --flat-playlist \ 27 | --parse-metadata "album:%(album)s" \ 28 | --parse-metadata "artist:%(artist)s" \ 29 | | while IFS= read -r line; do 30 | song_url=$(echo "$line" | jq -r '.url') 31 | title=$(echo "$line" | jq -r '.title') 32 | start_spinner "$title" "globe" 33 | yt-dlp "$song_url" \ 34 | --extract-audio --audio-format mp3 \ 35 | --cookies-from-browser firefox \ 36 | --output "$BASE_DIRECTORY/%(artist)s/%(album)s/%(track_number)s %(title)s.mp3" \ 37 | --download-archive archive.txt \ 38 | --add-metadata \ 39 | --embed-thumbnail \ 40 | --parse-metadata "album:%(album)s" \ 41 | --parse-metadata "artist:%(artist)s" \ 42 | --quiet 43 | 44 | filename=$(fd "$title" -F -e "mp3") 45 | echo "$BASE_DIRECTORY/$filename" >> "$PlAYLIST_FILE" 46 | stop_spinner 47 | done 48 | 49 | -------------------------------------------------------------------------------- /scripts/downscale-music-collection.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i dash -p dash findutils ffmpeg-full 3 | 4 | # This will loop over all files in the music dir, find files with a high bitrate 5 | # and convert them down to a more reasonable bitrate. Credit: https://askubuntu.com/a/536891 6 | 7 | music_dir="/mnt/wolfpack/music/" 8 | 9 | cd "$music_dir" || exit 10 | find . -name '*.mp3' -exec sh -c 'ffprobe -show_streams -select_streams a:0 "$0" | grep -F "bit_rate=320000" && ffmpeg -y -i "$0" -c:a libmp3lame -b:a 128k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$0"' '{}' \; 11 | -------------------------------------------------------------------------------- /scripts/emoji-picker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Opens a menu with a list of unicode emojis, the selection will be copied to clipboard or typed directly 4 | # Taken from here: https://github.com/LukeSmithxyz/voidrice 5 | 6 | if [ "$(loginctl show-session "$(awk '/tty/ {print $1}' <(loginctl))" -p Type | awk -F= '{print $2}')" = "wayland" ]; then 7 | notify-send "emoji picker" "Use bemoji" & 8 | exit 9 | fi 10 | 11 | # Get user selection via rofi -dmenu from emoji file. 12 | # chosen=$(cut -d ';' -f1 ./assets/emoji.txt | rofi -dmenu -i -l 10 -fn "UbuntuMono Nerd Font Mono" -nf "#ff0066" | sed "s/ .*//") 13 | chosen=$(cut -d ';' -f1 /bin/scripts/assets/emoji.txt | rofi -dmenu -p "> " -fn "Twemoji" | sed "s/ .*//") 14 | 15 | # Exit if none chosen. 16 | [ -z "$chosen" ] && exit 17 | 18 | notify-send "emoji picker" "'$chosen' copied to clipboard." & 19 | -------------------------------------------------------------------------------- /scripts/eww/mpd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | mpc > /dev/null 4 | while [ $? -ne 0 ]; do 5 | sleep 5 6 | printf "\nMPD not running...\n" 7 | done 8 | 9 | print_info() { 10 | song=$(mpc -f "%artist% - %title%" current) 11 | info=$(mpc) 12 | if grep -q "playing" <<< "$info" 13 | then 14 | printf "\n%s\n" "$(mpc -f "%artist% - %title%" current)" 15 | else 16 | printf "\npaused\n"; 17 | fi 18 | } 19 | 20 | print_info 21 | mpc idleloop | while read -r _ ; do 22 | print_info 23 | done 24 | -------------------------------------------------------------------------------- /scripts/eww/start-eww: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # # https://github.com/elkowar/eww/issues/178#issuecomment-1229498664 4 | # bspc subscribe node_state | while read -r _ _ _ _ state flag; do 5 | # if [ "$state" != fullscreen ]; then continue; fi 6 | # if [ "$flag" = on ]; then 7 | # xdotool search --class eww-bar windowunmap 8 | # else 9 | # xdotool search --class eww-bar windowmap 10 | # fi 11 | # done & 12 | 13 | if [ "$(hostname)" = "emperor" ] 14 | then 15 | eww open bar --screen "2460G4" 16 | eww open smallbar --screen "HP E232" 17 | else 18 | eww open bar 19 | fi 20 | -------------------------------------------------------------------------------- /scripts/eww/volume: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # https://unix.stackexchange.com/a/230533 4 | print_volume() { 5 | pactl list sinks | grep '^[[:space:]]Volume:' | \ 6 | head -n $(( SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' 7 | } 8 | 9 | volume=$(print_volume) 10 | printf "\n%s\n" "$volume" 11 | pactl subscribe | while read -r _ ; do 12 | new_volume=$(print_volume) 13 | if [ "$volume" != "$new_volume" ]; then 14 | volume="$new_volume" 15 | printf "\n%s\n" "$volume" 16 | fi 17 | done 18 | -------------------------------------------------------------------------------- /scripts/eww/workspace: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | workspace() { 4 | identifier="$1" 5 | current="$2" 6 | occupied="$3" 7 | name=$(bspc query -d "$identifier" -D --names) 8 | state="empty" 9 | if [[ "$current" == *"$identifier"* ]]; then 10 | state="current" 11 | elif [[ "$occupied" == *"$identifier"* ]]; then 12 | state="occupied" 13 | fi 14 | printf ' 15 | { 16 | "name": "%s", 17 | "state": "%s", 18 | "identifier": "%s" 19 | }' "$name" "$state" "$identifier" 20 | } 21 | 22 | workspaces() { 23 | all=$(bspc query -D) 24 | current=$(bspc query -D -d .focused) 25 | occupied=$(bspc query -D -d .occupied) 26 | result="[" 27 | while IFS= read -r identifier; do 28 | result="$result$(workspace "$identifier" "$current" "$occupied")," 29 | done <<< "$all" 30 | result="${result%,*}" 31 | result="$result]" 32 | printf "%s" "$result" | tr --delete '\n' | tr --delete ' ' 33 | printf "\n" 34 | } 35 | 36 | workspaces 37 | 38 | workspaces 39 | bspc subscribe all | while read -r _ ; do 40 | printf "\n" 41 | workspaces 42 | done 43 | -------------------------------------------------------------------------------- /scripts/extract_norg.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | NORG_FILE="$1" 4 | 5 | QUERY=""" 6 | (ranged_tag 7 | (tag_name) @name 8 | (ranged_tag_content) @code 9 | (#eq? @name \"code\")) 10 | """ 11 | 12 | extraced_code=$(tree-sitter query --captures <(printf "%s" "$QUERY") "$NORG_FILE" | /bin/sed "s/ pattern:\s*\w*, capture:\s*\w*\s*-\s*name, start:\s*(\w*,\s*\w*),\s*end:\s(\w*,\s*\w*),\s*text:\s\`code\`//" | /bin/sed "s/ pattern:\s*\w*, capture:\s*\w*\s*-\s*code, start:\s*(\w*,\s*\w*),\s*end:\s(\w*,\s*\w*),\s*text:\s/---\n/" | awk '{ if (NR!=1) { print substr($0, 3, length($0)-5) } }' RS="---") 13 | 14 | echo "$extraced_code" 15 | -------------------------------------------------------------------------------- /scripts/fav-song.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # This script grabs the track currently played by cmus and puts the filename into a playlist file 4 | # The menu displayed will contain every file in the specified dir starting with a. 5 | # Typing any name will automatically save to a new filename (Full path needs to be typed) 6 | 7 | # Directory to search for m3u files 8 | dirname="/mnt/Vault/music" 9 | # Filter for finding playlist files 10 | filter="a.*.m3u" 11 | 12 | # Get selection 13 | files=$(find $dirname -maxdepth 1 -name "$filter") 14 | # File to write to 15 | filename=$(printf "%s" "$files" | rofi -dmenu -c) 16 | 17 | [ -z "$filename" ] && exit 18 | 19 | # Get relative path to song and write it to the file 20 | # songname=$(cmus-remote -Q 2>/dev/null | sed "s/file \/mnt\/Vault\/music/./;t;d") 21 | songname=$(mpc -f "%file%" current | sed 's/^/\.\//g') 22 | printf "%s\n" "$songname" >> "$filename" 23 | 24 | # Display notification 25 | filename=$(echo "$filename" | rev | cut -d '/' -f 1 | rev) 26 | songname=$(echo "$songname" | rev | cut -d '/' -f 1 | rev) 27 | notify-send -a "fav-song" "Save song" "Song $songname to $filename successfully" 28 | -------------------------------------------------------------------------------- /scripts/filestat.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | FILE="$1" 4 | DATABASE="$2" 5 | ABS_PATH="$(realpath "$FILE")" 6 | ABS_PATH="$(printf "%q" "$ABS_PATH")" 7 | 8 | printf "%s\n" "$ABS_PATH" 9 | 10 | sqlite3 "$DATABASE" \ 11 | "CREATE TABLE IF NOT EXISTS files ( 12 | path TEXT PRIMARY KEY, 13 | path_rel TEXT, 14 | permissions INTEGER, 15 | device_number INTEGER, 16 | raw_mode TEXT, 17 | file_type TEXT, 18 | group_id INTEGER, 19 | num_hardlinks INTEGER, 20 | mount_point TEXT, 21 | size INTEGER, 22 | device_type INTEGER, 23 | user_id INTEGER, 24 | user_name TEXT, 25 | time_birth INTEGER, 26 | time_last_access INTEGER, 27 | time_last_data_modification INTEGER, 28 | time_last_status_modification INTEGER 29 | );" 30 | 31 | sqlite3 "$DATABASE" \ 32 | "INSERT INTO files ( 33 | path, 34 | path_rel, 35 | permissions, 36 | device_number, 37 | raw_mode, 38 | file_type, 39 | group_id, 40 | num_hardlinks, 41 | mount_point, 42 | size, 43 | device_type, 44 | user_id, 45 | user_name, 46 | time_birth, 47 | time_last_access, 48 | time_last_data_modification, 49 | time_last_status_modification) 50 | VALUES 51 | ('$ABS_PATH', $(stat --printf="%N, %a, %d, '%f', '%F', %g, %h, '%m', %s, %r, %u, '%U', %W, %X, %Y, %Z)" "$FILE") 52 | ;" 53 | 54 | 55 | -------------------------------------------------------------------------------- /scripts/generate_audio_for_anki_deck.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i bash -p bash piper-tts parallel 3 | 4 | anki_deck="$1" 5 | line_count=$(wc -l < "$anki_deck") 6 | count_total=$((line_count - 6)) 7 | declare -x count_total 8 | 9 | echo "0" > "/tmp/anki_audio_progress" 10 | 11 | read_progress() { 12 | read -r progress < "/tmp/anki_audio_progress" 13 | } 14 | export -f read_progress 15 | 16 | increase_progress() { 17 | read_progress 18 | progress=$((progress + 1)) 19 | echo "$progress" > "/tmp/anki_audio_progress" 20 | } 21 | export -f increase_progress 22 | 23 | audios="$HOME/.local/share/Anki2/User 1/collection.media/" 24 | cd "$audios" || exit 25 | 26 | echo "" 27 | 28 | process_line() { 29 | read_progress 30 | line="$1" 31 | # 7 is the index of the column that audio will be generated for 32 | sentence=$(echo "$line" | awk -F "\t" '{print $7}') 33 | sha=$(echo "$sentence" | sha256sum | awk -F " " '{print $1}') 34 | if [ -f "$sha.wav" ]; then 35 | echo -e "$progress/$count_total \e[32m$sentence\e[0m" 36 | increase_progress 37 | else 38 | echo -e "$progress/$count_total \e[31m$sentence\e[0m" 39 | tts --model_name tts_models/en/multi-dataset/tortoise-v2 \ 40 | --text "$sentence" \ 41 | --out_path "$sha.wav" \ 42 | --progress_bar True \ 43 | --voice_dir /tmp/tortoise-tts/tortoise/voices \ 44 | --speaker_idx "lj" > /dev/null 2> /dev/null 45 | increase_progress 46 | fi 47 | } 48 | 49 | export -f process_line 50 | 51 | tail -n+7 "$anki_deck" | parallel --line-buffer -j 3 process_line 52 | 53 | # Once finished, rewrite the CSV to include the new audio 54 | cd /tmp || exit 1 55 | head -n 7 "$anki_deck" > out.csv 56 | while IFS= read -r line; do 57 | sentence=$(echo "$line" | awk -F "\t" '{print $7}') 58 | sha=$(echo "$sentence" | sha256sum | awk -F " " '{print $1}') 59 | echo "$line" | awk -v sha="[sound:$sha.wav]" 'BEGIN { FS = OFS = "\t" } { $8 = sha; print }' >> out.csv 60 | done <<< "$(tail -n+7 "$anki_deck")" 61 | -------------------------------------------------------------------------------- /scripts/get_deezer_album_links_by_id3_tags.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i bash -p bash fd exiftool curl 3 | 4 | # Create a loop over each 2-level deep directory 5 | fd . --min-depth 2 --max-depth 2 --type directory | while read -r dir; do 6 | echo "Checking dir: $dir" 7 | 8 | # For every mp3 file in this directory, get the ISRC code 9 | fd . --extension mp3 "$dir" | while read -r file; do 10 | echo "Checking file: $file" 11 | 12 | # Get the ISRC code 13 | ISRC=$(exiftool -ISRC "$file" | awk -F' ' '{print $NF}') 14 | 15 | json_file="$dir/$ISRC.json" 16 | 17 | if [ ! -f "$json_file" ]; then 18 | # Use curl to make a get request to the Deezer API to get the information about the track using the ISRC code 19 | JSON=$(curl -s "https://api.deezer.com/2.0/track/isrc:$ISRC") 20 | 21 | # Check if curl command failed 22 | if [ $? -eq 0 ]; then 23 | # Store the result in a json file with the filename "$ISRC.json" 24 | echo "$JSON" > "$json_file" 25 | else 26 | echo "Curl command failed for file: $file" 27 | exit 1 # Exit the script with an error code 28 | fi 29 | else 30 | echo "JSON file already exists for ISRC: $ISRC" 31 | fi 32 | 33 | # # Use curl to make a get request to the Deezer API to get the information about the track using the ISRC code 34 | # JSON=$(curl -s "https://api.deezer.com/2.0/track/isrc:$ISRC") 35 | 36 | # # Store the result in a json file with the filename "$ISRC.json" 37 | # echo "$JSON" > "$dir/$ISRC.json" 38 | done 39 | 40 | values=() 41 | # fd . --extension json "$dir" | while read -r file; do 42 | # link=$(jq -r '.album.link' "$file") 43 | # if [ -n "$link" ]; then 44 | # values+=("$link") 45 | # fi 46 | # done 47 | while IFS= read -r -d $'\0' file; do 48 | link=$(jq -r '.album.link' "$file") 49 | if [ -n "$link" ]; then 50 | values+=("$link") 51 | fi 52 | done < <(fd . --extension json "$dir" -0) 53 | first_value="${values[0]}" 54 | same_values=true 55 | 56 | for value in "${values[@]}"; do 57 | if [ "$value" != "$first_value" ]; then 58 | same_values=false 59 | break 60 | fi 61 | done 62 | 63 | if [ "$same_values" ]; then 64 | echo "$first_value" > "$dir/link.txt" 65 | fi 66 | echo "Same links: $same_values" 67 | done 68 | 69 | -------------------------------------------------------------------------------- /scripts/import_deezer_albums_to_beets.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env nix-shell 2 | #! nix-shell -i bash -p bash fd beets parallel 3 | # 4 | # music_dir="/mnt/wolfpack/music_to_import/"; fd . "$music_dir" --min-depth 2 --max-depth 2 --type directory | while read -r dir; do 5 | # if [ -f "$dir/link.txt" ]; then 6 | # url=$(cat "$dir/link.txt") 7 | # echo "importing $dir ($url)" 8 | # beet import -q -m "$dir" --search-id "$url" 9 | # fi 10 | # done 11 | 12 | music_dir="/mnt/wolfpack/music_to_import/" 13 | 14 | # Define a function to process each directory in parallel 15 | process_directory() { 16 | dir="$1" 17 | if [ -f "$dir/link.txt" ]; then 18 | url=$(cat "$dir/link.txt") 19 | echo "importing $dir ($url)" 20 | beet import -q -m "$dir" --search-id "$url" 21 | fi 22 | } 23 | 24 | export -f process_directory # Export the function for use with parallel 25 | 26 | # Find directories and process them in parallel 27 | fd . "$music_dir" --min-depth 2 --max-depth 2 --type directory | \ 28 | parallel -j 12 process_directory {} 29 | 30 | -------------------------------------------------------------------------------- /scripts/is_program_running.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | unalias -a 4 | 5 | if pgrep "$1" > /dev/null; then 6 | echo "running" 7 | else 8 | echo "not running" 9 | fi 10 | -------------------------------------------------------------------------------- /scripts/keyboard-layout-switcher.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | german="german" 4 | dvorak="dvorak" 5 | pdvorak="programmer dvorak" 6 | english="english" 7 | 8 | if [ "$XDG_CURRENT_DESKTOP" = "sway" ]; then 9 | notify-send -a "keyboard-layout-switcher" "Layout Switcher" "Disabled on sway" 10 | exit 11 | fi 12 | notify-send -a "keyboard-layout-switcher" "Layout Switcher" "Switched keyboard layout to $selection" 13 | 14 | selection=$(printf '%s\n%s\n%s\n%s' "$german" "$dvorak" "$pdvorak" "$english" | rofi -dmenu --prompt="Layout" --hide-scroll --insensitive) 15 | 16 | # Remove all custom mappings 17 | setxkbmap -option 18 | 19 | if [ "$selection" = "$german" ]; then 20 | setxkbmap de 21 | elif [ "$selection" = "$dvorak" ]; then 22 | setxkbmap gb dvorak 23 | elif [ "$selection" = "$pdvorak" ]; then 24 | setxkbmap -layout us -variant dvp -option compose:102 -option numpad:shift3 -option kpdl:semi -option keypad:atm -option caps:shift 25 | xmodmap -e "keycode 94=0x007c" 26 | elif [ "$selection" = "$english" ]; then 27 | setxkbmap gb 28 | fi 29 | 30 | # Send notification 31 | notify-send -a "keyboard-layout-switcher" "Layout Switcher" "Switched keyboard layout to $selection" 32 | # Send signal to lemonblocks 33 | pkill lemonblocks -8 & 34 | -------------------------------------------------------------------------------- /scripts/mcfly_to_atuin.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | if [ -z "$1" ]; then 4 | echo "No arguments supplied." 5 | echo "First argument should be new atuin database" 6 | echo "Second argument should be mcfly database to migrate." 7 | exit 8 | fi 9 | 10 | sqlite3 "$2" << EOS 11 | BEGIN TRANSACTION; 12 | CREATE TEMPORARY TABLE commands_backup(command,timestamp,exit,cwd,session,id,hostname); 13 | INSERT INTO commands_backup SELECT cmd,(when_run*1000000000),exit_code,IIF(dir IS NULL, 'UNKOWN', dir),session_id,(('$(hostname)' || ':' || '$USER') || '-' || id),('$(hostname)' || ':' || '$USER') FROM commands; 14 | DROP TABLE commands; 15 | CREATE TABLE commands(id, timestamp, duration, exit, command, cwd, session, hostname); 16 | INSERT INTO commands(id,command,timestamp,exit,cwd,session,duration,hostname) SELECT id,command,timestamp,exit,cwd,session,-1,hostname FROM commands_backup; 17 | DROP TABLE commands_backup; 18 | COMMIT; 19 | SELECT * FROM commands LIMIT 20; 20 | EOS 21 | 22 | sqlite3 "$1" << EOS 23 | attach "$2" as to_migrate; 24 | BEGIN; 25 | INSERT OR IGNORE INTO history SELECT * FROM to_migrate.commands; 26 | COMMIT; 27 | detach to_migrate; 28 | EOS 29 | -------------------------------------------------------------------------------- /scripts/mpd-open-playlist.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # This script shows a list of playlists in a given directory, clears the current playlist in mpd and adds all songs from the selected playlist 4 | 5 | dir="/mnt/Vault/music/" 6 | 7 | selection=$(find "$dir" -maxdepth 1 -name "*.m3u*" | rofi -dmenu -i -matching fuzzy) 8 | 9 | mpc clear 10 | 11 | sed "s|./|mpc add \"|" "$selection" | sed "s|$|\"|" | bash 12 | 13 | -------------------------------------------------------------------------------- /scripts/mpd-status.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Polybar script for getting the current song from cmus 4 | 5 | # Call cmus-remote -Q to get available information about the current song 6 | song=$(mpc -f "%artist% - %title%" current) 7 | info=$(mpc) 8 | # Store the return value to check if cmus is running 9 | retval=$? 10 | 11 | if [ $retval -ne 0 ]; then 12 | # If the return value is not 0, then echo nothing, since cmus is not running 13 | printf " " 14 | exit 15 | else 16 | # Cmus is running, so find out if it's playing or paused and echo the corresponding glyph 17 | if grep -q "playing" << EOF 18 | $info 19 | EOF 20 | then 21 | printf ""; 22 | else 23 | printf "paused"; 24 | exit 25 | fi 26 | fi 27 | 28 | chrlen=${#song} 29 | 30 | # How long to make the text before starting to scroll 31 | maxlen=25 32 | 33 | if [ "$chrlen" -ge $maxlen ]; then 34 | # Read offset from file 35 | offset="$(($(head -n 1 /tmp/mpdoffset)))" 36 | # Add one 37 | offset="$((offset + 1))" 38 | # Test if offset should be reset 39 | if [ "$song" != "$(sed "2q;d" /tmp/mpdoffset)" ]; then 40 | rm /tmp/mpdoffset 41 | offset=0 42 | fi 43 | if [ $((offset + maxlen - 1)) -ge "$chrlen" ]; then 44 | rm /tmp/mpdoffset 45 | offset=0 46 | fi 47 | # Write offset back to file 48 | printf '%b\n%s' "$offset" "$song" > /tmp/mpdoffset 49 | song="${song:$offset:$maxlen}" 50 | fi 51 | 52 | 53 | # Parse the info to get the progress in % 54 | # total=$(echo "$info" | sed -r "s/duration //;t;d") 55 | # progr=$(echo "$info" | sed -r "s/position //;t;d") 56 | # perc=$(awk -v n="$total" -v m="$progr" 'BEGIN{ print int(( m/n )*100) }') 57 | perc=$(echo "$info" | grep -oie "([[:digit:]]*%)" | tr '%' ' ' | tr '(' ' ' | tr ')' ' ') 58 | chrlen=${#song} 59 | perc_chr=$(awk -v n="$chrlen" -v m="$perc" 'BEGIN{ print int( n*(m/100)) }') 60 | 61 | # What to put at the beginning of the string 62 | # b="\e[31m" 63 | b="%%{F#ff0066}" 64 | # What to put in the middle of the string 65 | # m="\e[0m" 66 | m="%%{F-}" 67 | # What to put at the end of the string 68 | # e="\e[0m" 69 | e="" 70 | 71 | song="$b${song:0:$perc_chr}$m${song:$perc_chr:$chrlen}$e" 72 | printf "%s" "$song" 73 | -------------------------------------------------------------------------------- /scripts/open-firewall.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Toggle allowing traffic on a certain port 4 | 5 | PORT="$1" 6 | TABLE_NAME="nixos-fw" 7 | 8 | MODE="$2" 9 | 10 | if [ "$(id -u)" -ne 0 ]; then 11 | echo "This script must be run as root" 12 | exit 1 13 | fi 14 | 15 | handle=$(nft -a list chain inet nixos-fw input | grep "dport $PORT accept" | awk '{print $NF}') 16 | 17 | open() { 18 | nft insert rule inet "$TABLE_NAME" input tcp dport "$PORT" accept 19 | } 20 | close() { 21 | nft delete rule inet "$TABLE_NAME" input handle "$handle" 22 | } 23 | 24 | case "$MODE" in 25 | 0|"toggle") 26 | if [ -n "$handle" ]; then 27 | echo "Port currently open, closing..." 28 | close 29 | else 30 | echo "Port currently closed, opening..." 31 | open 32 | fi 33 | ;; 34 | 1|"open") 35 | echo "Opening port..." 36 | open 37 | ;; 38 | 2|"close") 39 | echo "Closing port..." 40 | close 41 | ;; 42 | *) 43 | echo "Invalid mode: $MODE" 44 | ;; 45 | esac 46 | -------------------------------------------------------------------------------- /scripts/play-song.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # This script displays a rofi -dmenu with all mp3 files from a folder, upon selection the song will be played in cmus 4 | 5 | # Dir to search for music in 6 | dirname="/mnt/Vault/music/" 7 | 8 | cd "$dirname" || exit 9 | selection=$(find . -name "*.mp3" | rofi -dmenu -i -F) 10 | 11 | [ -z "$selection" ] && exit 12 | 13 | mpc clear 14 | mpc add "$(echo "$selection" | sed 's/\.\///g')" 15 | mpc play 16 | 17 | 18 | # Send notification 19 | songname=$(echo "$selection" | rev | cut -d '/' -f 1 | rev) 20 | notify-send -a "play-song" "Play song" "Now playing song $songname" 21 | -------------------------------------------------------------------------------- /scripts/program-launcher.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Rofi program launcher 4 | 5 | MAP="/home/b3nj4m1n/.config/wofi/map.csv" 6 | 7 | cut -d ',' -f 1 "$MAP" \ 8 | | wofi --dmenu -p "Util " \ 9 | | head -n 1 \ 10 | | xargs -I --no-run-if-empty grep "{}" "$MAP" \ 11 | | cut -d ',' -f 2 \ 12 | | head -n 1 \ 13 | | xargs -I --no-run-if-empty /usr/bin/env sh -c "{}" 14 | 15 | exit 0 16 | -------------------------------------------------------------------------------- /scripts/setup-repos.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | USER=b3nj4m1n 4 | 5 | GIT_SSH_COMMAND="ssh -i /home/$USER/.ssh/dk_sh_history -o StrictHostKeyChecking=no" git clone git@github.com:b3nj5m1n/sh_history.git /home/$USER/.local/share/sh_history 2>/dev/null 6 | GIT_SSH_COMMAND="ssh -i /home/$USER/.ssh/dk_tasks -o StrictHostKeyChecking=no" git clone git@github.com:b3nj5m1n/tasks.git /home/$USER/.local/share/task 2>/dev/null 7 | GIT_SSH_COMMAND="ssh -i /home/$USER/.ssh/dk_timew -o StrictHostKeyChecking=no" git clone git@github.com:b3nj5m1n/timew.git /home/$USER/.local/share/timew/data 2>/dev/null 8 | GIT_SSH_COMMAND="ssh -i /home/$USER/.ssh/dk_logseq -o StrictHostKeyChecking=no" git clone git@github.com:b3nj5m1n/logseq-db.git /home/$USER/.local/share/logseq 2>/dev/null 9 | GIT_SSH_COMMAND="ssh -i /home/$USER/.ssh/dk_zotero -o StrictHostKeyChecking=no" git clone git@github.com:b3nj5m1n/zotero-db.git /home/$USER/Zotero 2>/dev/null 10 | -------------------------------------------------------------------------------- /scripts/sxhkd-help-page.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | cat ~/.config/sxhkd/* | awk '/^[a-z]/ && last {print $0,"\t",last} {last=""} /^#/{last=$0}' | column -t -s ' ' | rofi -dmenu -i 4 | -------------------------------------------------------------------------------- /scripts/tmuxleft.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . ./tmuxstssrc.sh 3 | 4 | style_text bold 5 | component_currentwindow_or_prefix 6 | component_seperator " " "$default_bg" 7 | -------------------------------------------------------------------------------- /scripts/tmuxright.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . ./tmuxstssrc.sh 3 | 4 | style_bold 5 | component_hostname 6 | component_uptime 7 | component_date 8 | -------------------------------------------------------------------------------- /scripts/tmuxstssrc.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | # echo "#[fg=#02B696]#[bg=#D5D5B0]#[bold]%d/%m %H:%M" 3 | 4 | ##### Style Variables ##### 5 | export default_fg="#f8f8f2" 6 | export default_bg="#282a36" 7 | export default_prefix=" " 8 | export default_suffix=" " 9 | export date_fg="#f8f8f2" 10 | export date_bg="#bd93f9" 11 | export hostname_fg="#f8f8f2" 12 | export hostname_bg="#50fa7b" 13 | export uptime_fg="#f8f8f2" 14 | export uptime_bg="#ffb86c" 15 | export currentwindow_fg="#f8f8f2" 16 | export currentwindow_bg="#bd93f9" 17 | 18 | ##### Style Control ##### 19 | style_text() { 20 | printf "#[%s]" "$1" 21 | } 22 | style_fg() { 23 | printf "#[fg=#%s]" "$1" 24 | } 25 | style_bg() { 26 | printf "#[bg=#%s]" "$1" 27 | } 28 | prefix() { 29 | printf "%s" "$default_prefix" 30 | } 31 | suffix() { 32 | printf "%s" "$default_suffix" 33 | } 34 | 35 | component_date() { 36 | style_fg "$date_fg" 37 | style_bg "$date_bg" 38 | prefix 39 | printf "%s" "$(date -u +"%d/%m/%Y")" 40 | suffix 41 | } 42 | component_hostname() { 43 | style_text bold 44 | style_fg "$hostname_fg" 45 | style_bg "$hostname_bg" 46 | prefix 47 | printf "%s" "$(hostname)" 48 | suffix 49 | } 50 | component_uptime() { 51 | style_text bold 52 | style_fg "$uptime_fg" 53 | style_bg "$uptime_bg" 54 | prefix 55 | printf "%s" "$(~/.local/share/bin/uptime.sh)" 56 | suffix 57 | } 58 | component_currentwindow() { 59 | style_text bold 60 | style_fg "$currentwindow_fg" 61 | style_bg "$currentwindow_bg" 62 | prefix 63 | printf "#W" 64 | suffix 65 | } 66 | component_seperator() { 67 | style_fg "" 68 | style_bg "$2" 69 | printf "%s" "$1" 70 | } 71 | component_prefix() { 72 | style_fg "$1" 73 | style_bg "$2" 74 | printf '#{?client_prefix, Prefix ,}' 75 | 76 | } 77 | component_currentwindow_or_prefix() { 78 | style_text bold 79 | style_fg "$currentwindow_fg" 80 | style_bg "$currentwindow_bg" 81 | prefix 82 | printf '%s' '#{?client_prefix,Prefix,#W}' 83 | suffix 84 | } 85 | -------------------------------------------------------------------------------- /scripts/transcode.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | set -e 4 | 5 | INPUT="$1" 6 | 7 | if grep -q "$INPUT" /drivemecrazy/transcoded.log; then 8 | echo "$INPUT seems to have already been transcoded" 9 | exit 1 10 | fi 11 | 12 | # ffmpeg -threads 10 -init_hw_device vaapi=foo:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device foo -i "$INPUT" -filter_hw_device foo -c:v hevc_vaapi -vf 'format=nv12,scale=640:-2,hwupload' -qp 28 -f mp4 "$INPUT.transcode" 13 | ffmpeg -threads 10 -init_hw_device vaapi=foo:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device foo -i "$INPUT" -filter_hw_device foo -c:v hevc_vaapi -vf 'hwupload' -qp 24 -f mp4 "$INPUT.transcode" 14 | printf "%s\n%s" "$(du -h "$INPUT")" "$(du -h "$INPUT.transcode")" 15 | if [ "$(du -bs "$INPUT" | cut -f1)" -gt "$(du -bs "$INPUT.transcode" | cut -f1)" ]; then 16 | mv "$INPUT.transcode" "$INPUT" 17 | printf "%s\nSUCCESS\n" "$INPUT" >> /drivemecrazy/transcoded.log 18 | else 19 | printf "%s\nFUCK\n" "$INPUT" >> /drivemecrazy/transcoded.log 20 | fi 21 | 22 | -------------------------------------------------------------------------------- /scripts/uptime.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Pass true as first argument to get long form 4 | 5 | seconds_uptime=$(awk '{print int($1)}' /proc/uptime) 6 | seconds_in_year=31556952; seconds_in_month=2629746; seconds_in_day=86400; seconds_in_hour=3600; seconds_in_minute=60; 7 | 8 | # The delimiter between 12 and hours 9 | DELIMITER_UNIT="" 10 | # The delimiter between 12 hours and 6 minutes 11 | DELIMITER_VALUES=" " 12 | 13 | # If we want the long form 14 | if [ "$1" ]; then DELIMITER_UNIT=" "; DELIMITER_VALUES=", "; fi 15 | 16 | unit_s_y="y"; unit_p_y="y" unit_s_mo="mo"; unit_p_mo="mo" unit_s_d="d"; unit_p_d="d" unit_s_h="h"; unit_p_h="h" unit_s_mi="m"; unit_p_mi="m"; 17 | if [ "$1" ]; then unit_s_y="year"; unit_p_y="years" unit_s_mo="month"; unit_p_mo="months" unit_s_d="day"; unit_p_d="days" unit_s_h="hour"; unit_p_h="hours" unit_s_mi="minute"; unit_p_mi="minutes"; fi 18 | 19 | print_value() { 20 | if [ "$seconds_uptime" -ge "$1" ]; then 21 | value=$((seconds_uptime / $1)) 22 | seconds_uptime=$((seconds_uptime - ( $1 * value ))) 23 | unit="$2" 24 | if [ "$value" -gt "1" ]; then unit="$3"; fi 25 | if [ "$4" ]; then delimiter_values=""; else delimiter_values="$DELIMITER_VALUES"; fi 26 | printf "%d%s%s%s" "$value" "$DELIMITER_UNIT" "$unit" "$delimiter_values" 27 | fi 28 | } 29 | 30 | print_value "$seconds_in_year" "$unit_s_y" "$unit_p_y" 31 | print_value "$seconds_in_month" "$unit_s_mo" "$unit_p_mo" 32 | print_value "$seconds_in_day" "$unit_s_d" "$unit_p_d" 33 | print_value "$seconds_in_hour" "$unit_s_h" "$unit_p_h" 34 | print_value "$seconds_in_minute" "$unit_s_mi" "$unit_p_mi" 35 | # print_value "$seconds_in_second" "$unit_s_s" "$unit_p_s" true 36 | -------------------------------------------------------------------------------- /scripts/wally.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | CURRENT_WALLPAPER="/usr/share/wallpapers/custom/moonRising.png" 4 | WALLPAPER="/home/b3nj4m1n/.config/wallpaper.png" 5 | 6 | # Copy the wallpaper to its appropriate location 7 | cp "$CURRENT_WALLPAPER" "$WALLPAPER" 8 | # Apply effect to wallpaper (Shift hue, i.e. change color) 9 | convert "$WALLPAPER" -modulate 100,100,$((0 + $(awk 'BEGIN{srand(); print int(32767 * rand())}') % 200)) "$WALLPAPER" 10 | # Set the new wallpaper 11 | feh --no-fehbg --bg-scale "$WALLPAPER" 12 | -------------------------------------------------------------------------------- /secrets/aliases.txt: -------------------------------------------------------------------------------- 1 | { 2 | "data": "ENC[AES256_GCM,data:oE5M0Vh+y47pvloHVyRmDv5cTrYphNY2J4Da0aBtU+4A0CLS,iv:xI2E/C0kegPLsyAjHfPDlu7bg3fM9RbWQDblwqWed8g=,tag:GV3Go0QSTxz+0SYSDD3axw==,type:str]", 3 | "sops": { 4 | "kms": null, 5 | "gcp_kms": null, 6 | "azure_kv": null, 7 | "hc_vault": null, 8 | "age": [ 9 | { 10 | "recipient": "age1ey5nqemqxfc7aferu3nyc7r4qt2yy6lz67l856auysnk9kk2e3js8t8u26", 11 | "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrSzhZdWJsZXI4TEwzTUgv\nK1BJZGpXb21qbE5CZFFWQTZxWEwzeHZjNFdrCmRLT2dJbWVJSCtxYmpwZmNKNlJn\nTnFRM0NGQU1rR1c5cHpWdmRGdVVZUEUKLS0tIFRIbGVTTEo4Y1gyUXRVLzU3ekhx\ncVY2SHZabThxRWhBK2RGQTFWMkRvbW8KHbB7AxfcKaOCWQtCTF/YWA++qBX4Tq8W\nDVQBoHw9HjjCC+pMlQBPs4X7Ff7XjKXMD+R5vmx7LlgrmzsLARu0ZQ==\n-----END AGE ENCRYPTED FILE-----\n" 12 | } 13 | ], 14 | "lastmodified": "2023-10-15T14:32:00Z", 15 | "mac": "ENC[AES256_GCM,data:GzjETP2GnFM5oCoNsQlJki1ni3jJnnaLPu7cJOhwUFqoPUB64c/lHGU6L0e1sBKW5LnS6JBodPD8Dg4cATPLza/O3yZLoNThwXpC3tKnF5SGYbi7rVHyJel4Lkg1QqvvBqS30BE71KgLESG8j7X5ha3c7TEhMjNjdc8mO5KAIjI=,iv:tNRyXXgN9JujzfG03d8RkhDaScNyVycvjvDvWDClXj4=,tag:SW7kqQ6OoXvL0ORd4FQNKA==,type:str]", 16 | "pgp": [ 17 | { 18 | "created_at": "2023-10-15T14:32:00Z", 19 | "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAyZAt1g4bmAPAQ/+Mom0btOmuW0HwQb4hTpvyzxPUT4wsUrCN+n5yVjFyFM/\n9sp3ovhFvjpYNByAGIcKI7vcyulIYuBgn1gHz8j3tf8KbQN2dbimQlByKVFibHHJ\nxKiwPp1bN+iM1+qJZOhhH9K5C+o7/j9JeJQmzCFDCP83h939wjA06BeYOkgUIr7t\nnk8SjQquzREOY3sWlkEsLEc/+BPOBCad17d206CRNqRuzAaMFTcWpfkr0t865uRy\nDheahNp4X9vkB8AimpPEPXv68kFzNjzVmNLOrH8LKaCsHZzDOA+2qmY6HMv/Gd/U\nMgXZOsU/zlCqCoS0LrrkgD09IoFQ7h/LXyS6me8dUHEXrL5P/vGPhhY437N/fiJv\nAyadp3qbAPY1J3WylBc2F2JnjF0eKaQTtag7V+LpIsCmB5EmAOsi9+gE+u8EzhnM\nWVZkjP0qHATz7U1uEbSWz07oNxFv2X4GUpZIixhm26CCqtFidL8zwtaQWRZfcXmb\njElOHyFoRvqdp6Pb/TDu7vxyL4wbFiu42BpJMS3OoR0HNlZ1X94uVxZMFaoXyMhG\nnsnci/1698x0Jb75J6v2bTyxonO6vcrdMYLyojoavNLs9SYrNj2Hf2v+vEF1179G\nSfEZq1L1bYZqXnih+BVM+C3JLpzMZYNczE5ebEgr8ZJ4cYPJfzNhfMS3YUSXMSHS\nXgFwtO+fhfoGnQ6fikwzmjdobIo7J9vQIULbLHBGH9mIVIV85FzcDkntYThJz64B\noutC2XY3rrQmqx/BpImZAu79pDveKW2tdpkwEHRYaU/h6KM1DHdX2FXIgcawCfQ=\n=vOq+\n-----END PGP MESSAGE-----", 20 | "fp": "9F7D2083BB220CEEB720E068309D4C8689849C5B" 21 | } 22 | ], 23 | "unencrypted_suffix": "_unencrypted", 24 | "version": "3.8.0" 25 | } 26 | } -------------------------------------------------------------------------------- /secrets/smartdresultsemail: -------------------------------------------------------------------------------- 1 | { 2 | "data": "ENC[AES256_GCM,data:2BgUThNj0haiwASRnEEV3BGu5knIRV03B2PR7xgE6zz5QhU5xVlxLOI=,iv:dOlukWy4LiMtBWCiRo0tlv25EtJxICWItSKPHF5y/FE=,tag:1je8/kKFYtb0h6nDwSHjgw==,type:str]", 3 | "sops": { 4 | "kms": null, 5 | "gcp_kms": null, 6 | "azure_kv": null, 7 | "hc_vault": null, 8 | "age": [ 9 | { 10 | "recipient": "age1ey5nqemqxfc7aferu3nyc7r4qt2yy6lz67l856auysnk9kk2e3js8t8u26", 11 | "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1Mm1lUktaV1pMMUJXeCsr\nRFQxNm5PS28vVlVMeDZZcXpQbUFiTWJ6eVNzCm1ONlVlcUtBY2hSbDZLK29mVk5n\ncjFkbW9xUStWU1AzQklBV21XNloxbXMKLS0tIHdhNWFKM1RXZVVheUl1NWJha3Iw\nN1Q2ZmoyZ0pHZnFha2VoNURUQzBDY1UKPVT/VbzHTltjvsgN9MjwSoHSx6gdAX8/\nYsY9RkTOl2LwT/tZaGdLLGC4IVlTLIijU60N+oYk8ZZ6XqKp9XI3Xw==\n-----END AGE ENCRYPTED FILE-----\n" 12 | } 13 | ], 14 | "lastmodified": "2023-10-15T15:26:10Z", 15 | "mac": "ENC[AES256_GCM,data:vOmetvcxeabmjwhKDrg9KrY/bb0NCLx0nF2+6E0EUwxe4tfFBY07E+HExoIdyNXSqFOLKGdcZyyLEfH6Q7/QDaQa0SqiwMC4zyeuuTxH+hwMzhXoM7RorZtd5gQjoeiYaLAhm+hQJgn8ZWr7ni2tIHAj96D0vl9ykkhtbZ8W+cM=,iv:85E+6WNQHm9HPsr/rPkE7ggiVgtqaYHHNcGu7fURtag=,tag:Ea61RbOa1vyX9d4t2zmcdg==,type:str]", 16 | "pgp": [ 17 | { 18 | "created_at": "2023-10-15T15:26:10Z", 19 | "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAyZAt1g4bmAPAQ/+PuA3OZ0ppRkxOcpisfbD8wZ8d9VUVTTPbbKSB13OBxvV\nOXqeUgzoOkA478nGHzJ7pI3Qo39g+ht1o59BW12Rw9Ad0HpMTTVCiiDpD7rhDe1X\nidl9i1frfVC7jY3gduvka34nFre+irjUpqu+hVK4DdSuSyoHrw/60/vRNxV0Id/Y\nqzSh5JBBAZjLgqdw7e9Js6jA1UeIKvPfpHPfzMge2EsZwInfU6PgnnCJ7t7jqwXy\n6QDZgjyLXYQVR3RY9FX00k70T4hPWDwMDTT8hSuq3DvyRw4hVhaOHt2NYgn2YDBK\nbYCo64M7bvhRzihpA7FO6eBav5T6w2BrRLuk/m3w2hN042ZhqfPs9vS2LENATJAX\nLrbyH13PFn8Gi36kYjzEzN0Fa/VTSMbJroP/y9v9PDLaIMDCgUxdhE//MyQx3erN\nmtdg7F5yYhgcyJgttFPRnwTPlIa3hLKFyvF8z4gFBOLqZCAQJHOkH1FXChE5elkl\nDzvKhNXGgZC+TwM31VZ42HPDgWj27265oHKk75vE8fR5jBqkXJGGHMM69Dz57eng\nni2yShh0sw+u9Ju32yaa1LQd7CZKEZcgRWWcJ6tSF3NIO7WMyHvtiIk/yEaQKGVJ\nhJVXXOsyn/S3kTf+A6kw6RXvwIOSgNitvWieuvS9d53vPW781Cz2dvT/fnsUJ0nS\nXgFWfAIDckE7dZGYS496mg9dsr8HVh//zkzS1AL9+8vTFHgABTveVDVdApaUwiNJ\ngeI0gEKTra+xXEYzsjz6KYUfPCpKwuQaGC2f/d2Jf0ljuk+aAUpVjalTj8y5wVM=\n=Sfgp\n-----END PGP MESSAGE-----", 20 | "fp": "9F7D2083BB220CEEB720E068309D4C8689849C5B" 21 | } 22 | ], 23 | "unencrypted_suffix": "_unencrypted", 24 | "version": "3.8.0" 25 | } 26 | } --------------------------------------------------------------------------------