diff options
39 files changed, 1382 insertions, 2306 deletions
diff --git a/.bashrc b/.bashrc deleted file mode 100644 index cd1b64e..0000000 --- a/.bashrc +++ /dev/null @@ -1,36 +0,0 @@ -source ~/.shells/alias.sh -source ~/.shells/exports.sh -source /etc/profile - - -if [ -e /etc/profile.env ] ; then - . /etc/profile.env -fi - -## Get completions -for sh in /etc/bash/bashrc.d/* ; do - [[ -r ${sh} ]] && source "${sh}" -done - -## Prompt -if ${use_color} ; then - PS1='PS1_CMD1=$(git branch 2>/dev/null | grep '"'"'"'"'"'"'"'"'*'"'"'"'"'"'"'"'"' | colrm 1 2)'; PS1='\n\[\e[38;5;153;2;3m\]\h\n\[\e[0;38;5;226m\]\w \[\e[38;5;63;1m\]${PS1_CMD1}\n\[\e[0;38;5;198m\]λ \[\e[0m\]' -else - PS1+='\u@\h \w \$ ' -fi - -## doas > sudo -complete -cf doas -complete -cf sudo -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.local/lib/mojo -export PATH=$PATH:~/.modular/pkg/packages.modular.com_mojo/bin/ -export PATH=$PATH:~/.modular/pkg/packages.modular.com_mojo/bin/ - -# Python -eval "$(pyenv init -)" -eval "$(pyenv virtualenv-init -)" -if command -v pyenv 1>/dev/null 2>&1; then - eval "$(pyenv init -)" -fi -export PYENV_ROOT="$HOME/.pyenv" -export PATH="$PYENV_ROOT/bin:$PATH" diff --git a/.config/alacritty/alacritty.toml b/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..327ef67 --- /dev/null +++ b/.config/alacritty/alacritty.toml @@ -0,0 +1,8 @@ +[window] +opacity = 0.9 + +[colors] +primary.background="#0C0C0C" + +[font] +normal={family="Jetbrains Mono", style="Regular"} diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml deleted file mode 100644 index 24e666f..0000000 --- a/.config/alacritty/alacritty.yml +++ /dev/null @@ -1,3 +0,0 @@ -window: - opacity: 0.90 - diff --git a/.config/autostart/autostart.sh b/.config/autostart/autostart.sh index 2d5498f..2d5498f 100755..100644 --- a/.config/autostart/autostart.sh +++ b/.config/autostart/autostart.sh diff --git a/.emacs.d/init.el b/.config/emacs/init.el index 392a5ec..493f554 100644 --- a/.emacs.d/init.el +++ b/.config/emacs/init.el @@ -1,9 +1,8 @@ -;;; init.el --- Welcome to my Emacs configuration! -*- lexical-binding: t; -*- +;;; init.el --- Emacs configuration -*- lexical-binding: t; -*- ;; Copyright (C) 2023 Thanos Apollo -;; Author: Thanos Apollo <[email protected]> -;; Keywords: extensions +;; Author: Thanos Apollo <[email protected]> ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -29,56 +28,24 @@ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ ;;; Code: +;; Disable package.el +(setq package-enable-at-startup nil + package-archives nil) + (setf user-full-name "Thanos Apollo" user-mail-address "[email protected]") + (defvar is-zeus (equal (system-name) "zeus")) (defvar is-hermes (equal (system-name) "hermes")) (defvar is-phone (equal (system-name) "localhost")) -(setf browse-url-browser-function 'browse-url-generic - browse-url-generic-program "firefox" - backup-directory-alist '((".*" . "~/.Trash")) - sentence-end-double-space t - default-input-method "bulgarian-phonetic" - ;; fix emacs hangs - gc-cons-threshold 5000000 - ispell-program-name (executable-find "hunspell")) - -(define-key global-map (kbd "M-<backspace>") 'backward-kill-sexp) -(define-key global-map (kbd "C-c L") 'display-line-numbers-mode) -(define-key global-map (kbd "C-z") 'nil) -(define-key global-map (kbd "C-c r") 'rename-visited-file) - -(add-to-list 'load-path "~/.emacs.d/modules") - -(setf disabled-command-function nil ;; Enable all commands - url-privacy-level 'high) ;; Privacy level - -;; Calendar dates -(setf calendar-date-style 'european) - -(require 'dired) -(define-key dired-mode-map (kbd "b") 'dired-up-directory) -(define-key dired-mode-map (kbd "v") 'dired-watch-video) -(define-key dired-mode-map (kbd "z") 'wdired-change-to-wdired-mode) -(define-key dired-mode-map (kbd "C-c w") 'dired-set-wallpaper) -(define-key dired-mode-map (kbd "C-c d") 'dired-delete-files-except) -(define-key dired-mode-map (kbd "C-c r") 'dired-do-query-replace-regexp) - -;; font +;; Font (custom-set-faces (if is-hermes '(default ((t (:inherit nil :height 120 :family "Jetbrains Mono")))) - '(default ((t (:inherit nil :height 130 :family "Jetbrains Mono")))))) - -(if is-zeus - (display-battery-mode 0) - (display-battery-mode 1)) - -(savehist-mode) -(save-place-mode 1) -(recentf-mode 1) -(electric-pair-mode 1) + '(default ((t (:inherit nil :height 130 :family "Jetbrains Mono"))))) + '(variable-pitch ((t (:inherit t :family "Iosevka Aile")))) + '(org-modern-symbol ((t (:inherit t :family "Iosevka Aile"))))) ;; Autoinsert (auto-insert-mode 1) @@ -90,16 +57,10 @@ (setf tab-always-indent 'complete) -;; tramp -(setf tramp-default-method "ssh") - ;; xref (setf xref-show-xrefs-function #'consult-xref xref-show-definitions-function #'consult-xref) -(add-hook 'emacs-lisp-mode-hook #'prettify-symbols-mode) -(add-hook 'lisp-mode-hook #'prettify-symbols-mode) - ;; Set and load custom.el (setf custom-file (locate-user-emacs-file "custom.el")) (load custom-file 'noerror) @@ -125,19 +86,107 @@ (eval-print-last-sexp))) (load bootstrap-file nil 'nomessage)) -(setq package-enable-at-startup nil) - (require 'straight) (setf straight-use-package-by-default t) (setf straight-recipe-overrides '((transmission :type git :host nil :repo "[email protected]:/var/git/transmission.git") - (yeetube :type git :host nil :repo "[email protected]:/var/git/yeetube.git") + ;; (yeetube :type git :host nil :repo "[email protected]:/var/git/yeetube.git") (gnosis :type git :host nil :repo "[email protected]:/var/git/gnosis.git") (pcmpl-emerge :type git :host nil :repo "[email protected]:/var/git/pcmpl-emerge.git") (pcmpl-rc :type git :host nil :repo "[email protected]:/var/git/pcmpl-rc.git"))) +(use-package emacs + :ensure t + :config + + (setf browse-url-browser-function 'browse-url-generic + browse-url-generic-program "icecat" + backup-directory-alist '((".*" . "~/.Trash")) + sentence-end-double-space t + default-input-method "bulgarian-phonetic" + gc-cons-threshold 5000000 + disabled-command-function nil ;; Enable all commands + url-privacy-level 'high + calendar-date-style 'european) + (if is-zeus + (display-battery-mode 0) + (display-battery-mode 1)) + + ;; use ssh for tramp, faster for small files + (setf tramp-default-method "ssh") + + (savehist-mode) + (save-place-mode 1) + (recentf-mode 1) + (electric-pair-mode 1) + :bind (("M-<backspace>" . 'backward-kill-sexp) + ("C-c L" . 'display-line-numbers-mode) + ("C-z" . nil) + ("C-c r" . 'rename-visited-file)) + :hook ((emacs-lisp-mode . prettify-symbols-mode) + (lisp-mode . prettify-symbols-mode))) + +(use-package dired + :straight nil + :ensure nil + :config + (defun dired-watch-video () + "Watch play file with mpv." + (interactive) + (call-process-shell-command + (format "mpv \"%s\"" (dired-get-filename)) nil 0)) + + (defun dired-set-wallpaper () + "Set NAME as wallpaper using feh." + (interactive) + (let ((command (if is-zeus "swaybg -o DP-2 -i" "feh --bg-scale"))) + (call-process-shell-command + (format "%s %s" command (dired-get-filename)) nil 0))) + + (defun dired-delete-files-except () + "Delete all files inside directory except match." + (interactive) + (let* ((directory (read-directory-name "Select directory: ")) + (files (directory-files directory t)) + (except-match (read-string "Except the ones that have: "))) + (dolist (file files) + (unless (or (string= "." (substring file -1)) + (string= ".." (substring file -2)) + (string-match except-match file)) + (dired-delete-file file t))))) + + (defun dired-delete-file-match () + "Delete all files inside directory except match." + (interactive) + (let* ((directory (read-directory-name "Select directory: ")) + (files (directory-files directory t)) + (match (read-string "Delete files that match: "))) + (dolist (file files) + (when (string-match-p match file) + (dired-delete-file file t))))) + + (defun dired-rename-capitalize-file () + "Capitalize the base name of the file at point in a Dired buffer." + (interactive) + (let* ((file (dired-get-file-for-visit)) + (new-file (capitalize (file-name-nondirectory file)))) + (if (string-prefix-p "." file) + (message "Skipping file starting with '.'") + (progn + (rename-file file (concat (file-name-directory file) new-file)) + (revert-buffer) + (message "Renamed %s to %s" file new-file))))) + :bind ((:map + dired-mode-map + ("b" . 'dired-up-directory) + ("v" . 'dired-watch-video) + ("z" . 'wdired-change-to-wdired-mode) + ("C-c w" . 'dired-set-wallpaper) + ("C-c d" . 'dired-delete-files-except) + ("C-c r" . 'dired-do-query-replace-regexp)))) + (defun theme-invisible-dividers (_theme) "Make window dividers for THEME invisible." (let ((bg (face-background 'default))) @@ -166,7 +215,8 @@ (add-to-list 'default-frame-alist '(alpha-background . 85)) ;; theming -(global-hl-line-mode) +;; (global-hl-line-mode) +(global-visual-line-mode) (defun thanos/terminal-theming () "Customize theming when laucning Emacs as TUI." @@ -184,6 +234,8 @@ (tooltip-mode -1) (menu-bar-mode -1) +;; (when is-zeus +;; (guix-emacs-autoload-packages)) (use-package org :ensure t @@ -204,6 +256,7 @@ ("l" . "src lisp") ("b" . "src bash") ("q" . "QUOTE"))) + :hook ((org-mode . org-auto-tangle-mode) (org-mode . (lambda () (display-line-numbers-mode -1) (flyspell-mode)))) :bind (:map org-mode-map @@ -219,10 +272,10 @@ (use-package org-modern :ensure t :config - (global-org-modern-mode) (setf org-modern-table nil org-modern-todo nil - org-modern-tag nil)) + org-modern-tag nil) + :hook ((org-mode . org-modern-mode))) ;; Create notes directory for org-roam (unless (file-exists-p "~/Notes") @@ -263,6 +316,7 @@ "\n* Daily Notes\n\n* Goals\n+ []\n\n* Extras %?" :target (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n#+filetags: :journal:\n")))) + (defun org-roam-ref-add-book () "Insert org-link from Library." (interactive) @@ -285,6 +339,7 @@ (shell-command (format "%s %s %s" git "commit -m" (shell-quote-argument "Update org-roam notes"))) (vc-git-push nil)) (funcall 'org-roam-db-sync)) + :bind (("C-c n" . thanos/notes-map) :map thanos/notes-map ("t" . org-roam-buffer-toggle) @@ -299,6 +354,9 @@ (use-package org-roam-ui :defer t) +;; (use-package jabber +;; :defer t) + (use-package modus-themes :straight t :config @@ -319,8 +377,8 @@ ;; (bg-main "#1d2021") ;;grubox-hard ;; (bg-main "#191919") ;; 1337 ;; (bg-main "#1d1f21") ;; tomorrow night - (bg-main "#151515") ;; jazz - ;; (bg-main "#0C0C0C") ;; random black + ;; (bg-main "#151515") ;; jazz + (bg-main "#0C0C0C") ;; random black ;; (bg-main "#171717") ;; badger ;; (overline-heading-1 gold) (fg-heading-1 red-warmer) @@ -414,7 +472,7 @@ (setf elfeed-feeds '(("https://hackaday.com/blog/feed/" hackaday linux) - ("https://thanosapollo.com/posts/index.xml" + ("https://thanosapollo.org/index.xml" thanos) ("http://wikileaks.org/feed" wikileaks) @@ -436,7 +494,8 @@ ("https://devonzuegel.com/feed" devon) ("https://www.addtoany.com/add_to/feed?linkurl=http%3A%2F%2Fwww.thelancet.com%2Frssfeed%2Flancet_online.xml&type=feed&linkname=The%20Lancet%20Online%20First&linknote=" lancet med) ("http://tools.cdc.gov/podcasts/feed.asp?feedid=183" cdc med) - ("http://planet.lisp.org/rss20.xml" lisp planetlisp))) + ("http://planet.lisp.org/rss20.xml" lisp planetlisp) + ("https://guix.gnu.org/feeds/blog.atom" guix))) :bind (("C-x f" . elfeed) :map elfeed-search-mode-map ("v" . 'elfeed-mpv) @@ -453,7 +512,8 @@ :defer t) (use-package elpy - :ensure t + :straight nil + :ensure nil :init (elpy-enable)) @@ -494,9 +554,6 @@ ("C-h a" . 'apropos) ("C-h C-m" . 'info-apropos))) -(use-package password-store - :defer t) - (use-package ox-hugo :ensure t :config @@ -552,12 +609,16 @@ completion-cycle-threshold 2)) (use-package pdf-tools - :ensure t + :straight nil + :ensure nil :config - (pdf-tools-install) - (add-to-list 'auto-mode-alist '("\\.pdf\\'" . 'pdf-view-mode)) + (add-to-list 'auto-mode-alist '("\\.pdf\\'" . pdf-view-mode)) :hook - ((pdf-view-mode . (lambda () (display-line-numbers-mode 0))))) + ((pdf-view-mode . (lambda () + (display-line-numbers-mode 0) + ;; Guix package emacs-pdf-tools does not enable + ;; minor modes automatically + (pdf-tools-enable-minor-modes))))) (use-package markdown-mode :defer t @@ -581,6 +642,7 @@ :bind ((:map thanos/search ("i" . 'change-inner)))) (use-package nov + :straight nil :defer t :config (add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))) @@ -594,6 +656,7 @@ :commands emojify-mode) (use-package flycheck-package + :straight t :ensure t :after flycheck) @@ -605,17 +668,21 @@ :hook ((emacs-lisp-mode . (lambda () (flycheck-mode) (flycheck-package-setup))))) ;; Shells -;; (use-package vterm -;; :defer t -;; :bind (("C-c v" . vterm) -;; :map vterm-mode-map -;; ("M-&" . 'async-shell-command) -;; ("C-c C-y" . 'vterm-copy-mode)) -;; :hook ((vterm-mode . (lambda () (display-line-numbers-mode -1))))) +(use-package vterm + :straight nil + :ensure nil + :bind (("C-c v" . vterm) + :map vterm-mode-map + ("M-&" . 'async-shell-command) + ("C-c C-y" . 'vterm-copy-mode)) + :hook + ((vterm-mode . (lambda () (display-line-numbers-mode -1))))) (use-package shell :defer t - :bind (("C-c v" . shell)) + :bind (("C-c V" . shell) + :map shell-mode-map + ("C-l" . 'comint-clear-buffer)) :hook ((shell-mode . (lambda () (display-line-numbers-mode -1))))) (defvar thanos/aliases @@ -634,11 +701,18 @@ (defalias (car alias) (cdr alias))) aliases)) +(defun thanos/eshell-clear () + "Interactive call for clear-scrollback." + (interactive) + (eshell/clear-scrollback)) + (use-package eshell :config (setf eshell-highlight-prompt t) (eshell-syntax-highlighting-global-mode 1) - :bind (("C-c e" . eshell)) + :bind (("C-c e" . eshell) + :map eshell-mode-map + ("C-l" . 'thanos/eshell-clear)) :hook ((eshell-mode . (lambda () (thanos/set-eshell-aliases thanos/aliases) (display-line-numbers-mode -1))))) @@ -650,24 +724,74 @@ (setf eat-term-name "xterm-256color")) (use-package eshell-git-prompt - :straight '(eshell-git-prompt :type git - :host nil - :repo "https://git.thanosapollo.org/eshell-git-prompt") :config + (defun eshell-git-prompt-multiline () + "Eshell Git prompt inspired by spaceship-prompt." + (let (separator hr dir git git-dirty time sign command) + (setq separator (with-face " | " 'eshell-git-prompt-multiline-secondary-face)) + (setq hr (with-face (concat "\n" (make-string (/ (window-total-width) 2) ?─) "\n") 'eshell-git-prompt-multiline-secondary-face)) + (setq dir + (concat + (with-face "" 'eshell-git-prompt-directory-face) + (concat (abbreviate-file-name (eshell/pwd))))) + (setq git + (concat (with-face "⎇" 'eshell-git-prompt-exit-success-face) + (concat (eshell-git-prompt--branch-name)))) + (setq git-dirty + (when (eshell-git-prompt--branch-name) + (if (eshell-git-prompt--collect-status) + (with-face " ✎" 'eshell-git-prompt-modified-face) + (with-face " ✔" 'eshell-git-prompt-exit-success-face)))) + (setq time (with-face (format-time-string "%I:%M:%S %p") 'eshell-git-prompt-multiline-secondary-face)) + (setq sign + (if (= (user-uid) 0) + (with-face "\n#" 'eshell-git-prompt-multiline-sign-face) + (with-face "\nλ" 'eshell-git-prompt-multiline-sign-face))) + (setq command (with-face " " 'eshell-git-prompt-multiline-command-face)) + + ;; Build prompt + (eshell-git-prompt---str-read-only + (concat hr dir separator git git-dirty separator time sign command)))) + (eshell-git-prompt-use-theme 'multiline)) ;; Chat -(use-package telega +(use-package jabber :defer t - :hook ((telega-root-mode . (lambda () - (emojify-mode) - (display-line-numbers-mode -1))) - (telega-chat-mode . (lambda () - (emojify-mode) - (display-line-numbers-mode -1)))) :config - (setf telega-completing-read-function #'completing-read) - :bind (("C-x T" . 'telega))) + (defun jabber-buffers-formats (&optional buffer-formats) + "Return jabber BUFFER-FORMATS without the format specifiers. + +By default, returns all jabber related buffers format." + (let ((buffer-formats (or buffer-formats '(jabber-chat-buffer-format + jabber-browse-buffer-format + jabber-roster-buffer + jabber-groupchat-buffer-format + jabber-muc-private-buffer-format)))) + (cl-loop for var in buffer-formats + for str = (symbol-value var) + for formatted-str = (when (stringp str) + ;; Remove format specifier and + ;; the following 2 char, or 1 if + ;; there is not second. + (replace-regexp-in-string "%.?" "" str)) + collect formatted-str))) + + (defun jabber-switch-to-buffer () + "Prompt the user to select a buffer whose name matches a list of strings." + (interactive) + (let* ((string-list (jabber-buffers-formats)) + (buffers-matching-strings + (cl-loop for buf in (buffer-list) + when (cl-loop for str in string-list + thereis (string-match-p str (buffer-name buf))) + collect (buffer-name buf)))) + (if buffers-matching-strings + (switch-to-buffer + (completing-read "Select jabber buffer: " buffers-matching-strings))) + (error "No jabber buffer found"))) + :bind (:map jabber-global-keymap + ("C-b" . 'jabber-switch-to-buffer))) (use-package erc :defer t @@ -683,12 +807,12 @@ :map erc-mode-map ("C-c RET" . 'erc-cmd-QUERY))) -(use-package erc-image - :ensure t - :after erc - :config - (setq erc-image-inline-rescale 300) - (add-to-list 'erc-modules 'image)) +;; (use-package erc-image +;; :ensure t +;; :after erc +;; :config +;; (setq erc-image-inline-rescale 300) +;; (add-to-list 'erc-modules 'image)) (use-package transmission :defer t) @@ -696,7 +820,7 @@ (use-package sudo-edit :defer t :config - (setf sudo-edit-local-method "doas")) + (setf sudo-edit-local-method "sudo")) (use-package dabbrev :defer t @@ -709,16 +833,6 @@ (setf xref-show-xrefs-function #'consult-xref xref-show-definitions-function #'consult-xref)) -(use-package moc-player - :defer t - :straight '(moc-player :local-repo "~/Dev/emacs-lisp/moc-player") - :init (define-prefix-command 'thanos/mocp) - :bind (("C-z" . thanos/mocp) - :map thanos/mocp - ("SPC" . 'mocp-toggle-pause) - ("n" . 'mocp-next) - ("p" . 'mocp-previous))) - ;; My packages (when (or is-zeus is-hermes) (use-package yeetube @@ -730,6 +844,47 @@ yeetube-mpv-disable-video t yeetube-display-thumbnails t yeetube-play-function #'yeetube-mpv-play) + + (defun yeetube-download-videos-ffmpeg () + "Download videos using ffmpeg." + (interactive) + (let ((url "") + (name "") + (download-counter 1) + (stored-contents nil)) + ;; Read links and names until "q" is entered + (while (not (string= url "q")) + (setf url (read-string "Enter URL (q to quit): ")) + (unless (string= url "q") + (setf name (read-string (format "Custom name (download counter: %d) " download-counter))) + (push (cons url name) stored-contents) + (setf download-counter (1+ download-counter)))) + ;; Process the collected links and names + (dolist (pair stored-contents) + (let ((url (car pair)) + (name (cdr pair))) + (async-shell-command + (format + "ffmpeg -protocol_whitelist file,crypto,data,https,tls,tcp -stats -i '%s' -codec copy '%s.mp4'" + url name)))))) + + (defun yeetube-download-vimeo-videos () + "Download videos from vimeo services." + (interactive) + (let ((url "") + (name "") + (download-counter 1)) + (while (not (string= url "q")) + (setf url (read-string "Enter URL (q to quit): ")) + (unless (string= url "q") + (setf name (read-string (format "Custom name (download counter: %d) " download-counter))) + (setf download-counter (1+ download-counter)) + (call-process-shell-command + (format + "yt-dlp '%s' -o '%s'" + (replace-regexp-in-string "\\.json" ".m3u8" url) name) + nil 0))))) + :bind (("C-c y" . 'thanos/yeetube-map) :map thanos/yeetube-map ("s" . 'yeetube-search) @@ -747,12 +902,10 @@ :ensure t :init (define-prefix-command 'thanos/gnosis-map) :config - (setf gnosis-vc-auto-push (when (or is-hermes - is-zeus) - t) + (setf gnosis-vc-auto-push t gnosis-mcq-display-choices nil - gnosis-image-width (if is-zeus 300 150) - gnosis-image-height (if is-zeus 300 150)) + gnosis-image-width nil + gnosis-image-height nil) (gnosis-modeline-mode) :bind (("C-r" . thanos/gnosis-map) :map thanos/gnosis-map @@ -763,19 +916,7 @@ ("t" . 'gnosis-test-start))) ;; Run vc-pull on startup - (gnosis-vc-pull) - - (use-package pcmpl-emerge - :defer t - :straight (pcmpl-emerge :local-repo "~/Dev/emacs-lisp/pcmpl-emerge")) - - (use-package pcmpl-rc - :straight (pcmpl-rc :local-repo "~/Dev/emacs-lisp/pcmpl-rc") - :defer t) - - (use-package pcmpl-tailscale - :straight (pcmpl-tailscale :local-repo "~/Dev/emacs-lisp/pcmpl-taiscale") - :defer t)) + (gnosis-vc-pull)) ;; Emacs dev @@ -788,8 +929,7 @@ :config (setf gptel-api-key (password-store-get-field "openai/[email protected]" "api") gptel-default-mode 'org-mode) - (setq-default gptel-model "zephyr:latest" - gptel-backend (gptel-make-ollama "Ollama" + (setq-default gptel-backend (gptel-make-ollama "Ollama" :host "zeus:11434" :stream t :models '("llama2:latest" "zephyr:latest" "codellama:latest" @@ -805,56 +945,59 @@ :map gptel-mode-map ("C-c h" . 'gptel-menu))) -(use-package copilot - :straight (copilot :host github :repo "zerolfx/copilot.el" :files ("dist" "*.el")) - :bind (:map copilot-mode-map - ("M-TAB" . 'copilot-accept-completion-by-line) - ("C-M-<tab>" . 'copilot-accept-completion-by-word) - ("C-M-n" . 'copilot-next-completion) - ("C-M-p" . 'copilot-previous-completion))) - ;; Password-store -(require 'password-store) -(defun thanos/pass-launcher () - "Launch Emacs as a front-end for pass." - (interactive) - (unwind-protect - (with-selected-frame - (make-frame '((name . "thanos/pass-launcher") - (fullscreen . 0) - (undecorated . t) - (minibuffer . only) - (width . 70) - (height . 15))) - (let* ((choice (completing-read "Choose an action: " - '("AUTO" "COPY PASS" "COPY USERNAME" "EDIT" "GENERATE"))) - (action (pcase choice - ("AUTO" #'(lambda (entry) (let ((user (password-store-get-field entry "user")) - (pass (password-store-get entry))) - (start-process-shell-command - "xdotool" nil - (format "sleep 0.3 && xdotool getactivewindow type %s && xdotool key Tab && xdotool getactivewindow type %s" - (shell-quote-argument (if user user "thanosapollo")) - (shell-quote-argument pass)))))) - ("COPY PASS" #'password-store-copy) - ("COPY USERNAME" #'(lambda (entry) (password-store-copy-field entry "user"))) - ("EDIT" #'password-store-edit) - ("GENERATE" #'password-store-generate)))) - (funcall action (completing-read "Search: " (password-store-list))) - (delete-frame))))) - -(defun smtp-get-pass () - "Get password for smtp." - (interactive) - (password-store-copy-field "fastmail.com/[email protected]" "smtp")) - - (use-package password-store :init (define-prefix-command 'thanos/pass) :defer t :config (setf password-store-password-length (+ 20 (random 20))) + + (defmacro thanos/make-frame (name &rest body) + "Create temporary frame as NAME. + +Create a temporary frame to execute BODY, which will then be deleted." + `(unwind-protect + (with-selected-frame + (make-frame '((name . ,name) + (fullscreen . 0) + (undecorated . t) + (minibuffer . only) + (width . 70) + (height . 15))) + ,@body + (delete-frame)))) + + (defun thanos/pass-autotype (&optional entry) + "Autotype password ENTRY." + (let* ((entry (or entry (password-store--completing-read t))) + (user (password-store-get-field entry "user")) + (pass (password-store-get entry))) + (start-process-shell-command + "wtype" nil + (format "sleep 0.3 && wtype %s -P tab %s" + (shell-quote-argument (if user user "thanosapollo")) + (shell-quote-argument pass))))) + + (defun thanos/pass-launcher () + "Launch Emacs as a front-end for pass." + (interactive) + (thanos/make-frame + "thanos/pass-launcher" + (let* ((choice (completing-read "Choose an action: " + '("AUTO" "COPY PASS" "EDIT" "GENERATE"))) + (action (pcase choice + ("AUTO" #'thanos/pass-autotype) + ("COPY PASS" #'password-store-copy) + ("EDIT" #'password-store-edit) + ("GENERATE" #'password-store-generate)))) + (funcall action (completing-read "Search: " (password-store-list)))))) + + (defun smtp-get-pass () + "Get password for smtp." + (interactive) + (password-store-copy-field "fastmail.com/[email protected]" "smtp")) + :bind (("C-c p" . 'thanos/pass) :map thanos/pass ("i" . 'password-store-insert) @@ -876,8 +1019,247 @@ :map mu4e-headers-mode-map ("M-s" . 'consult-mu))) -(require 'thanos-commands) ;; Misc commands +;; Guix Setup +;; Yasnippet configuration +(with-eval-after-load 'yasnippet + (add-to-list 'yas-snippet-dirs "~/Dev/guile/guix/etc/snippets/yas")) +;; ;; Tempel configuration +;; (with-eval-after-load 'tempel +;; ;; Ensure tempel-path is a list -- it may also be a string. +;; (unless (listp 'tempel-path) +;; (setq tempel-path (list tempel-path))) +;; (add-to-list 'tempel-path "~/Dev/guile/guix/etc/snippets/tempel/*")) + +(use-package yaml-mode + :defer t) + +;(load-file "~/Dev/guile/guix/etc/copyright.el") + +(setq copyright-names-regexp + (format "%s <%s>" user-full-name user-mail-address)) + (when (or is-zeus is-hermes) - (require 'thanos-mu4e)) + (use-package mu4e + :straight nil + :ensure nil + :init + + :config + (require 'server) + (require 'mu4e) + + (setf mu4e-get-mail-command "mbsync -a") + + (when (and is-zeus (server-running-p)) + (setf mu4e-update-interval (* 10 60))) + + (defun set-mu4e-context (context-name full-name mail-address signature) + "Return a mu4e context named CONTEXT-NAME with :match-func matching + folder name CONTEXT-NAME in Maildir. The context's `user-mail-address', + `user-full-name' and `mu4e-compose-signature'`smtpmail-smpt-server' is set to MAIL-ADDRESS + FULL-NAME SIGNATURE and SERVER respectively. + Special folders are set to context specific folders." + (let ((dir-name (concat "/" context-name))) + (make-mu4e-context + :name context-name + ;; we match based on the maildir of the message + :match-func + `(lambda (msg) + (when msg + (string-match-p + ,(concat "^" dir-name) + (mu4e-message-field msg :maildir)))) + :vars + `((user-mail-address . ,mail-address) + (user-full-name . ,full-name) + (mu4e-sent-folder . ,(concat dir-name "/Sent")) + (mu4e-drafts-folder . ,(concat dir-name "/Drafts")) + (mu4e-trash-folder . ,(concat dir-name "/Trash")) + (mu4e-trash-folder . ,(concat dir-name "/Starred")) + (mu4e-refile-folder . ,(concat dir-name "/Archive")) + (mu4e-compose-signature . ,signature))))) + + ;;Fixing duplicate UID errors when using mbsync and mu4e + (setf mu4e-change-filenames-when-moving t + mu4e-maildir-shortcuts + '(("/Fastmail/Inbox" . ?i) + ("/Drafts" . ?d) + ("/Sent" . ?s) + ("/Fastmail/Emacs/dev" . ?e) + ("/MUSofia/[Gmail]/All Mail" . ?u) + ("/Fastmail/Gentoo" . ?g))) + + (setf mu4e-contexts + (list + (make-mu4e-context + :name "Public" + :match-func + (lambda (msg) + (when msg + (string-prefix-p "/Fastmail" (mu4e-message-field msg :maildir)))) + :vars '((user-mail-address . "[email protected]") + (user-full-name . "Thanos Apollo") + (smtpmail-smtp-server . "smtp.fastmail.com") + (smtpmail-smtp-service . 465) + (smtpmail-stream-type . ssl) + (mu4e-drafts-folder . "/Drafts") + (mu4e-sent-folder . "/Sent") + (mu4e-refile-folder . "/Archive") + (mu4e-trash-folder . "/Trash"))) + (make-mu4e-context + :name "MUSofia" + :match-func + (lambda (msg) + (when msg + (string-prefix-p "/MUSofia" (mu4e-message-field msg :maildir)))) + :vars '((user-mail-address . "[email protected]") + (user-full-name . "Thanos Apollo") + (smtpmail-smtp-server . "smtp.gmail.com") + (smtpmail-smtp-service . 465) + (smtpmail-stream-type . ssl))))) + + (setf message-send-mail-function 'smtpmail-send-it + mu4e-compose-signature "\nThanos Apollo\n \nhttps://thanosapollo.org\n +62B7 58D0 F671 9938 BC09 CECA 339F 736C 3A72 0928\n" + mu4e-compose-context-policy 'ask) + + (setf mu4e-view-actions + (delete-dups + (append + '(("gapply git patches" . mu4e-action-git-apply-patch) + ("mgit am patch" . mu4e-action-git-apply-mbox) + ("bb4 am patch" . mu4e-action-git-apply-b4) + ("ssetup reword list with b4" . mu4e-action-setup-reword-b4) + ("crun checkpatch script" . my-mu4e-action-run-check-patch) + ("MCheck if merged" . my-mu4e-action-check-if-merged))))) + + :bind (("C-x m" . 'mu4e)) + :hook + ;; Sign messages + ((message-send . 'mml-secure-message-sign-pgpmime) + ;; Disable line numbers & autosave + (mu4e-main-mode . (lambda () (display-line-numbers-mode -1) (auto-save-mode -1)))))) + +;;; Random commands ;;;; +;;;;;;;;;;;;;;;;;;;;;;;; + +;; Virtual machines +(defvar vm-directory "~/Virtual/") + +(defun vm-create-image () + "Create qcow2 image." + (interactive) + (let ((name (format "%s%s.qcow2" vm-directory (read-string "Name: "))) + (size (format "%s" (read-string "Size(G): ")))) + (shell-command + (format "qemu-img create -f qcow2 %s %sG" name size)))) + + +(defun vm-run () + "Spawn Virtual Machine." + (interactive) + (let ((memory (format "%sG" (read-string "Memory(G): "))) + (cores (read-string "Cores: ")) + (image (read-file-name "Image: " vm-directory)) + (iso (if (y-or-n-p "Load iso? ") + (read-file-name "ISO: ") + nil))) + (async-shell-command + (format "qemu-system-x86_64 -enable-kvm -m %s -smp %s -hda %s -vga virtio -device virtio-serial-pci -netdev user,id=vmnic,hostfwd=tcp::2222-:22 -device e1000,netdev=vmnic %s" + memory cores image (if iso (concat "-cdrom " iso) ""))))) + +;; misc +(defun thanos/run-in-background (command) + "Run COMMAND in the background." + (let ((command-parts (split-string command "[ ]+"))) + (apply #'call-process `(,(car command-parts) nil 0 nil ,@(cdr command-parts))))) + +(defun create-text-scratch () + "Create a scratch buffer." + (interactive) + (switch-to-buffer (get-buffer-create "*Text Scratch*")) + (org-mode)) + +(defun create-scratch () + "Create scratch buffer." + (interactive) + (switch-to-buffer (get-buffer-create "*scratch*")) + (emacs-lisp-mode)) + +(defvar-keymap thanos/create-map + :doc "Create custom buffers" + "t" #'create-text-scratch + "e" #'create-scratch) + +;; Theming + +(defvar wallpapers-dir "~/wallpapers/") + +(defun thanos/load-theme (&optional theme) + "Disable current theme and load a new THEME." + (interactive) + (let ((theme (or theme (intern (completing-read "Theme: " (custom-available-themes)))))) + (disable-theme (car custom-enabled-themes)) + (load-theme theme t))) + +(defun thanos/wallpaper-set (image) + "Set IMAGE as wallpaper, using feh." + (let ((command "swaybg -o '*' -i")) + ;; Kill previous swaybg + (call-process-shell-command "kill -15 $(pgrep swaybg | tail -n 1)") + ;; Set wallpaper + (call-process-shell-command + (format "%s %s%s -m stretch" command wallpapers-dir image) + nil 0))) + +(defun thanos/wallpaper-random () + "Set random wallpaper." + (interactive) + (let ((wallpapers (directory-files "~/wallpapers" nil "^[^.].*"))) + (thanos/wallpaper-set (nth (random (length wallpapers)) wallpapers)))) + +(defun thanos/wallpaper-select () + "Set wallpaper." + (interactive) + (let ((wallpaper (completing-read "Choose wallpaper: " (directory-files wallpapers-dir nil "^[^.].*")))) + (thanos/wallpaper-set wallpaper))) + +(defvar-keymap thanos/applications-map + :doc "Thanos commonly used programs" + "t" #'thanos/load-theme + "w" #'thanos/wallpaper-select + "C-c" thanos/create-map) + +(define-key global-map (kbd "C-c a") thanos/applications-map) + +(defun thanos/iimage-mode-buffer (arg) + "Display images if ARG is non-nil, undisplay them otherwise." + (let ((image-path (cons default-directory iimage-mode-image-search-path)) + (edges (window-inside-pixel-edges (get-buffer-window))) + file) + (with-silent-modifications + (save-excursion + (dolist (pair iimage-mode-image-regex-alist) + (goto-char (point-min)) + (while (re-search-forward (car pair) nil t) + (when (and (setq file (match-string (cdr pair))) + (setq file (locate-file file image-path))) + (if arg + (add-text-properties + (match-beginning 0) (match-end 0) + `(display + ,(create-image file nil nil + :max-width 120 + :max-height 120) + keymap ,image-map + modification-hooks + (iimage-modification-hook))) + (remove-list-of-text-properties + (match-beginning 0) (match-end 0) + '(display modification-hooks)))))))))) + +(define-minor-mode thanos/iimage-mode nil + :group 'iimage :lighter " iImg" + (thanos/iimage-mode-buffer thanos/iimage-mode)) ;;; init.el ends here diff --git a/.config/fuzzel/fuzzel.ini b/.config/fuzzel/fuzzel.ini new file mode 100644 index 0000000..c36c47c --- /dev/null +++ b/.config/fuzzel/fuzzel.ini @@ -0,0 +1,20 @@ +width=50 +font=Jetbrains Mono:weight=bold:size=10 +line-height=20 +fields=filename,name +inner-pad=15 +prompt="❯ " +layer=overlay +dpi-aware=yes +icons-enabled=false + +[colors] +background=0C0C0Cff +selection=3d4474fa +border=1e1e1eff + +[border] +radius=30 + +[dmenu] +exit-immediately-if-empty=yes diff --git a/.config/guix/channels.scm b/.config/guix/channels.scm new file mode 100644 index 0000000..66b4a77 --- /dev/null +++ b/.config/guix/channels.scm @@ -0,0 +1,14 @@ +(cons* (channel + (name 'nonguix) + (url "https://gitlab.com/nonguix/nonguix") + ;; Enable signature verification: + (introduction + (make-channel-introduction + "897c1a470da759236cc11798f4e0a5f7d4d59fbc" + (openpgp-fingerprint + "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))) + (channel + (name 'thanos-channel) + (url (string-append "file://" (getenv "HOME") + "/Dev/guile/guix-channel/"))) + %default-channels) diff --git a/.config/nyxt/default-search.lisp b/.config/nyxt/default-search.lisp index 356850e..8f286df 100644 --- a/.config/nyxt/default-search.lisp +++ b/.config/nyxt/default-search.lisp @@ -4,7 +4,8 @@ '("g" "https://google.com/search?q=~a" "https://google.com") '("gh" "https://github.com/search?q=~a" "https://github.com") '("aa" "https://annas-archive.org/search?q=~a" "https://annas-archive.org/") - '("duck" "https://duckduckgo.com/?q=~a" "https://duckduckgo.com/")) + '("duck" "https://duckduckgo.com/?q=~a" "https://duckduckgo.com/") + '("thanos" "https://search.thanosapollo.org/search?q=~a" "https://search.thanosapollo.org")) "List of search engines.") (define-configuration context-buffer diff --git a/.config/qtile/colors.py b/.config/qtile/colors.py index b02a764..b02a764 100755..100644 --- a/.config/qtile/colors.py +++ b/.config/qtile/colors.py diff --git a/.config/qtile/spotify2.png b/.config/qtile/spotify2.png Binary files differdeleted file mode 100755 index a7f88f7..0000000 --- a/.config/qtile/spotify2.png +++ /dev/null diff --git a/.config/starship.toml b/.config/starship.toml deleted file mode 100644 index e424a8c..0000000 --- a/.config/starship.toml +++ /dev/null @@ -1,94 +0,0 @@ -# Get editor completions based on the config schema -"$schema" = 'https://starship.rs/config-schema.json' -# Inserts a blank line between shell prompts -add_newline = true - -# Replace the '❯' symbol in the prompt with '➜' -[character] # The name of the module we are configuring is 'character' -success_symbol = '[λ](red)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green' -error_symbol = "[✖](bold red) " - -[battery] -full_symbol = "🔋" -charging_symbol = "🔌" -discharging_symbol = "⚡" - -[[battery.display]] -threshold = 30 -style = "bold red" - -[cmd_duration] -min_time = 10_000 # Show command duration over 10,000 milliseconds (=10 sec) -format = " took [$duration]($style)" - -[directory] -truncation_length = 5 -format = "[$path](yellow)[$lock_symbol]($lock_style) " - -[git_branch] -format = " [$symbol$branch]($style) " -symbol = "[](bold red) " -style = "blue bold" - -[git_commit] -commit_hash_length = 8 -style = "bold white" - -[git_state] -format = '[\($state( $progress_current of $progress_total)\)]($style) ' - -[git_status] -conflicted = "⚔️ " -ahead = "🏎️ 💨 ×${count}" -behind = "🐢 ×${count}" -diverged = "🔱 🏎️ 💨 ×${ahead_count} 🐢 ×${behind_count}" -untracked = " ×${count}" -stashed = "📦 " -modified = " ×${count}" -staged = "🗃️ ×${count}" -renamed = "📛 ×${count}" -deleted = "🗑️ ×${count}" -style = "bright-white" -format = "$all_status$ahead_behind" - -[hostname] -ssh_only = false -format = "<[$hostname]($style)>" -trim_at = "-" -style = "bold dimmed white" -disabled = true - -[julia] -format = "[$symbol$version]($style) " -symbol = "ஃ " -style = "bold green" - -[memory_usage] -format = "$symbol[${ram}( | ${swap})]($style) " -threshold = 70 -style = "bold dimmed white" -disabled = false - -[package] -disabled = true - -[python] -format = "[$symbol$version]($style) " -style = "bold green" - -[rust] -format = "[$symbol$version]($style) " -style = "bold green" - -[time] -time_format = "%T" -format = "🕙 $time($style) " -style = "bright-white" -disabled = true - -[username] -style_user = "bold dimmed blue" -show_always = false - -[nodejs] -format = "via [🤖 $version](bold green) " diff --git a/.config/sway/config b/.config/sway/config new file mode 100644 index 0000000..94e82d6 --- /dev/null +++ b/.config/sway/config @@ -0,0 +1,274 @@ +## Mod key +set $mod Mod4 + +exec sudo /home/thanos/.local/bin/tailscaled +exec waybar +bindsym $mod+z exec waybar +bindsym $mod+o exec killall -SIGUSR1 waybar + +# Workspace switch +bindsym $mod+period workspace back_and_forth + +bindsym $mod+comma grimshot save area +bindsym $mod+m grimshot save screen + +## Setup monitors & wallpapers +output DP-2 pos 0 0 res 2560x1440 bg ~/wallpapers/colors-fantasy.jpg stretch +output HDMI-A-1 pos 2560 0 res 2560x1440 bg ~/wallpapers/colors-fantasy.jpg fill transform 270 + +default_border pixel 3 +default_floating_border pixel 3 +gaps inner 5 +gaps outer 0 +bindsym $mod+shift+g exec swaymsg gaps outer all set 0 && swaymsg gaps inner all set 5 +bindsym $mod+g exec swaymsg gaps outer all set 0 && swaymsg gaps inner all set 0 + +# Activate smart borders (always) +smart_borders on +#smart_gaps on + +# Always float certain windows # +#swaymsg -t get_tree | grep app_id + for_window [app_id="pop-up"] floating enable + for_window [app_id="thanos/pass-launcher"] floating enable + for_window [app_id="bubble"] floating enable + for_window [app_id="task_dialog"] floating enable + for_window [app_id="Preferences"] floating enable + for_window [app_id="dialog"] floating enable + for_window [app_id="menu"] floating enable + for_window [app_id="Organizer"] floating enable + for_window [app_id="About"] floating enable + for_window [app_id="toolbox"] floating enable + for_window [app_id="page-info"] floating enable + for_window [app_id="webconsole"] floating enable + for_window [app_id="Authy"] floating enable + for_window [app_id="termfloat"] floating enable + for_window [app_id="termfloat"] resize set height 540 + for_window [app_id="termfloat"] resize set width 960 + for_window [app_id="mpv"] floating enable + for_window [app_id="mpv"] resize set height 540 + for_window [app_id="mpv"] resize set width 960 + for_window [app_id="Nautilus"] floating enable + for_window [app_id="Nautilus"] resize set height 540 + for_window [app_id="Nautilus"] resize set width 960 + +# Sticky floating windows(sticky enable|disable|toggle) + for_window [app_id="danmufloat"] floating enable + for_window [app_id="danmufloat"] sticky enable + for_window [app_id="danmufloat"] resize set height 540 + for_window [app_id="danmufloat"] resize set width 960 + +# Program Opacity + for_window [app_id="telegram"] opacity 0.95 + for_window [app_id="danmufloat"] opacity 0.80 + # for_window [app_id="icalingua"] opacity 0.95 + # for_window [class="netease-cloud-music"] opacity 0.90 + +# Focus follows mouse +focus_follows_mouse yes + +# Autostart # + +#exec_always --no-startup-id dunst & + +## Keyboard setup + +# NOTE: for bg phonetic use ,bg(phonetic) + input "type:keyboard" { + xkb_layout us,gr + xkb_options grp:win_space_toggle + } + + +# set gtk+ theme +set $gnome-schema org.gnome.desktop.interface + +# Window colours: border background text + # client.unfocused #2e3440 #1f222d #888888 + # client.focused_inactive #2e3440 #1f222d #888888 + # client.placeholder #2e3440 #1f222d #888888 + # client.urgent #D08770 #D08770 #ffffff + # client.background #242424 +client.focused #2D2D2D #2D2D2D #ffffff #ffffff #c6c6c6 +client.focused_inactive #0f1212 #0f1212 #ffffff #0f1212 #0f1212 +client.unfocused #2D2D2D #000000 #c6c6c6 #000000 #000000 +client.urgent #0f1212 #FF5555 #F8F8F2 #FF5555 #FF5555 +client.placeholder #000000 #000000 #F8F8F2 #000000 #000000 + +# TODO Direction keys, like Emacs + set $left h + set $down j + set $up k + set $right l + +#----------------------------------# +# Your preferred terminal emulator # +#----------------------------------# + set $term emacsclient -c + +# Control volume,monitor brightness,media players # + bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% + bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% + bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle + bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle + bindsym XF86MonBrightnessUp exec light -A 5 + bindsym XF86MonBrightnessDown exec light -U 5 + bindsym XF86AudioPlay exec playerctl play-pause + bindsym XF86AudioNext exec playerctl next + bindsym XF86AudioPrev exec playerctl previous + +# Key bindings --# + bindsym $mod+Return exec $term + bindsym $mod+Shift+Return exec kitty --class="termfloat" + bindsym $mod+Shift+m exec kitty --class="musicfox" --hold sh -c "musicfox" + bindsym $mod+Shift+d exec kitty --class="danmufloat" --hold sh -c "cd /home/ruixi/Codelearning/go/src/bilibili_live_tui/ && export TERM=xterm-256color && ./main" + + bindsym $mod+Shift+x exec --no-startup-id ~/.config/sway/swaylock.sh + bindsym $mod+t exec --no-startup-id telegram-desktop + bindsym $mod+bracketleft exec --no-startup-id grimshot --notify save area ~/Pictures/$(date "+%Y-%m-%d"T"%H:%M:%S_no_watermark").png + bindsym $mod+bracketright exec --no-startup-id grimshot --notify copy area + bindsym $mod+a exec --no-startup-id ~/.config/sway/grimshot_watermark.sh + + + # Kill focused window + bindsym $mod+q kill + + # Start your launcher + bindsym $mod+r exec fuzzel + + # Reload the configuration file + bindsym $mod+Shift+r reload + + # Exit sway (logs you out of your Wayland session) + bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' + + # Drag floating windows by holding down $mod and left mouse button. + # Resize them with right mouse button + $mod. + # Despite the name, also works for non-floating windows. + # Change normal to inverse to use left mouse button for resizing and right + # mouse button for dragging. + floating_modifier $mod normal + +# Moving around: # + # Move your focus around + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right focus right + # Or use $mod+[up|down|left|right] + bindsym $mod+Left focus left + bindsym $mod+Down focus down + bindsym $mod+Up focus up + bindsym $mod+Right focus right + + # Move the focused window with the same, but add Shift + bindsym $mod+Shift+$left move left + bindsym $mod+Shift+$down move down + bindsym $mod+Shift+$up move up + bindsym $mod+Shift+$right move right + # Ditto, with arrow keys + bindsym $mod+Shift+Left move left + bindsym $mod+Shift+Down move down + bindsym $mod+Shift+Up move up + bindsym $mod+Shift+Right move right + +# Workspaces: + # Switch to workspace + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + # Move focused container to workspace + bindsym $mod+Shift+1 move container to workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10 + # move focused container to workspace(follow) + bindsym $mod+Ctrl+1 move container to workspace number 1, workspace 1 + bindsym $mod+Ctrl+2 move container to workspace number 2, workspace 2 + bindsym $mod+Ctrl+3 move container to workspace number 3, workspace 3 + bindsym $mod+Ctrl+4 move container to workspace number 4, workspace 4 + bindsym $mod+Ctrl+5 move container to workspace number 5, workspace 5 + bindsym $mod+Ctrl+6 move container to workspace number 6, workspace 6 + bindsym $mod+Ctrl+7 move container to workspace number 7, workspace 7 + bindsym $mod+Ctrl+8 move container to workspace number 8, workspace 8 + bindsym $mod+Ctrl+9 move container to workspace number 9, workspace 9 + bindsym $mod+Ctrl+0 move container to workspace number 10, workspace 10 + # Note: workspaces can have any name you want, not just numbers. + # We just use 1-10 as the default. +# Layout stuff: + # You can "split" the current object of your focus with + # $mod+semicolon or $mod+apostrophe, for horizontal and vertical splits + # respectively. + bindsym $mod+semicolon splitv + bindsym $mod+apostrophe splith + + # Switch the current container between different layout styles + bindsym $mod+s layout stacking + bindsym $mod+w exec emacsclient -e '(thanos/pass-launcher)' + bindsym $mod+e layout toggle split + + # Make the current focus fullscreen + bindsym $mod+f fullscreen + + # Toggle the current focus between tiling and floating mode + bindsym $mod+Shift+space floating toggle + + # Swap focus between the tiling area and the floating area + bindsym $mod+space focus mode_toggle + + # Move focus to the parent container + bindsym $mod+p focus parent + # Move focus the child container + bindsym $mod+c focus child + +# Scratchpad: # +## hide | show window(minus is "-" and plus is "+".) +bindsym $mod+minus move scratchpad +bindsym $mod+equal scratchpad show + +#----------------------# +# Resizing containers: # +#----------------------# +#bindsym $mod+r mode "resize" +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $up resize grow height 10px + bindsym $down resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Up resize grow height 10px + bindsym Down resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +## Better to resize window +bindsym Shift+Ctrl+h resize shrink width 5 px or 5 ppt +bindsym Shift+Ctrl+k resize grow height 5 px or 5 ppt +bindsym Shift+Ctrl+j resize shrink height 5 px or 5 ppt +bindsym Shift+Ctrl+l resize grow width 5 px or 5 ppt +bindsym Shift+Ctrl+Left resize shrink width 5 px or 5 ppt +bindsym Shift+Ctrl+Up resize grow height 5 px or 5 ppt +bindsym Shift+Ctrl+Down resize shrink height 5 px or 5 ppt +bindsym Shift+Ctrl+Right resize grow width 5 px or 5 ppt diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..a5c780a --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,112 @@ +// -*- mode: json -*- + +{ + "layer": "top", + "position": "top", + + "modules-left": [ + "sway/workspaces", + "custom/right-arrow-dark" + ], + "modules-center": [ + "custom/left-arrow-dark", + "clock#1", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "clock#2", + "custom/right-arrow-dark", + "custom/right-arrow-light", + "clock#3", + "custom/right-arrow-dark" + ], + "modules-right": [ + "custom/left-arrow-dark", + "pulseaudio", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "memory", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "cpu", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "battery", + "custom/left-arrow-light", + "tray" + ], + + "custom/left-arrow-dark": { + "format": "", + "tooltip": false + }, + "custom/left-arrow-light": { + "format": "", + "tooltip": false + }, + "custom/right-arrow-dark": { + "format": "", + "tooltip": false + }, + "custom/right-arrow-light": { + "format": "", + "tooltip": false + }, + + "sway/workspaces": { + "disable-scroll": true, + "format": "{name}" + }, + + "clock#1": { + "format": "{:%a}", + "tooltip": false + }, + "clock#2": { + "format": "{:%H:%M}", + "tooltip": false + }, + "clock#3": { + "format": "{:%m-%d}", + "tooltip": false + }, + + "pulseaudio": { + "format": "VOL: {volume:2}%", + "format-bluetooth": "{icon} {volume}%", + "format-muted": "MUTE", + "format-icons": { + "headphones": "", + "default": [ + "", + "" + ] + }, + "scroll-step": 5, + "on-click": "pamixer -t", + "on-click-right": "pavucontrol" + }, + "memory": { + "interval": 5, + "format": "MEM {}%" + }, + "cpu": { + "interval": 5, + "format": "CPU {usage:2}%" + }, + "battery": { + "states": { + "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "BAT: {capacity}%", + }, + "disk": { + "interval": 5, + "format": "Disk {percentage_used:2}%", + "path": "/" + }, + "tray": { + "icon-size": 10 + } +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..4c6cbf0 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,74 @@ +* { + font-size: 15px; + font-family: monospace; +} + +window#waybar { + background: #292b2e; + color: #fdf6e3; +} + +#custom-right-arrow-dark, +#custom-left-arrow-dark { + color: #1a1a1a; +} +#custom-right-arrow-light, +#custom-left-arrow-light { + color: #292b2e; + background: #1a1a1a; +} + +#workspaces, +#clock.1, +#clock.2, +#clock.3, +#pulseaudio, +#memory, +#cpu, +#battery, +#disk, +#tray { + background: #1a1a1a; +} + +#workspaces button { + padding: 0 2px; + color: #fdf6e3; +} +#workspaces button.focused { + color: #268bd2; +} +#workspaces button:hover { + box-shadow: inherit; + text-shadow: inherit; +} +#workspaces button:hover { + background: #1a1a1a; + border: #1a1a1a; + padding: 0 3px; +} + +#pulseaudio { + color: #268bd2; +} +#memory { + color: #2aa198; +} +#cpu { + color: #6c71c4; +} +#battery { + color: #859900; +} +#disk { + color: #b58900; +} + +#clock, +#pulseaudio, +#memory, +#cpu, +#battery, +#disk { + padding: 0 10px; +} diff --git a/.emacs.d/insert/python.template b/.emacs.d/insert/python.template deleted file mode 100644 index 63f77b6..0000000 --- a/.emacs.d/insert/python.template +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env python3 - diff --git a/.emacs.d/modules/thanos-commands.el b/.emacs.d/modules/thanos-commands.el deleted file mode 100644 index af9603f..0000000 --- a/.emacs.d/modules/thanos-commands.el +++ /dev/null @@ -1,295 +0,0 @@ -;;; thanos-commands.el --- custom commands/functions -*- lexical-binding: t; -*- - -;; Copyright (C) 2023 Thanos Apollo - -;; Author: Thanos Apollo <[email protected]> -;; Keywords: - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: -;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ -;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ -;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ -;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ -;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ -;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ -;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ -;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ -;;; Code: - -;; VM -(defvar vm-directory "~/Virtual/") - -(defun vm-create-image () - "Create qcow2 image." - (interactive) - (let ((name (format "%s%s.qcow2" vm-directory (read-string "Name: "))) - (size (format "%s" (read-string "Size(G): ")))) - (shell-command - (format "qemu-img create -f qcow2 %s %sG" name size)))) - - -(defun vm-run () - "Spawn Virtual Machine." - (interactive) - (let ((memory (format "%sG" (read-string "Memory(G): "))) - (cores (read-string "Cores: ")) - (image (read-file-name "Image: " vm-directory)) - (iso (if (y-or-n-p "Load iso? ") - (read-file-name "ISO: ") - nil))) - (async-shell-command - (format "qemu-system-x86_64 -enable-kvm -m %s -smp %s -hda %s -vga virtio -device virtio-serial-pci -netdev user,id=vmnic,hostfwd=tcp::2222-:22 -device e1000,netdev=vmnic %s" - memory cores image (if iso (concat "-cdrom " iso) ""))))) - -;; MISC - -(defun thanos/run-in-background (command) - "Run COMMAND in the background." - (let ((command-parts (split-string command "[ ]+"))) - (apply #'call-process `(,(car command-parts) nil 0 nil ,@(cdr command-parts))))) - -(defun thanos/emacs-keys () - "Swap caps with ctrl." - (interactive) - (start-process-shell-command - "setxkbmap" nil "setxkbmap us -option ctrl:swapcaps")) - -(defun thanos/center-buffer () - (interactive) - (set-fringe-mode - (/ (- (frame-pixel-width) - (* 150 (frame-char-width))) - 2))) - -(defun thanos/git-clone (repository) - "Clone git REPOSITORY." - (interactive (list (read-string "repo: "))) - (call-process-shell-command - (concat "git clone " (shell-quote-argument repository)) nil 0)) - -;; CREATE - -(defun create-text-scratch () - "Create a scratch buffer." - (interactive) - (switch-to-buffer (get-buffer-create "*Text Scratch*")) - (org-mode)) - -(defun create-scratch () - "Create scratch buffer." - (interactive) - (switch-to-buffer (get-buffer-create "*scratch*")) - (emacs-lisp-mode)) - -(defvar-keymap thanos/create-map - :doc "Create custom buffers" - "t" #'create-text-scratch - "e" #'create-scratch) - -;; THEMING -(defvar wallpapers-dir "~/wallpapers/") - -(defun thanos/load-theme (&optional theme) - "Disable current theme and load a new THEME." - (interactive) - (let ((theme (or theme (intern (completing-read "Theme: " (custom-available-themes)))))) - (disable-theme (car custom-enabled-themes)) - (load-theme theme t))) - -(defun thanos/wallpaper-set (image) - "Set IMAGE as wallpaper, using feh." - (let ((command (if is-zeus "xwallpaper --output DisplayPort-1 --stretch" "feh --bg-scale"))) - (call-process-shell-command (concat command " " wallpapers-dir image) nil 0))) - -(defun thanos/wallpaper-random () - "Set random wallpaper." - (interactive) - (let ((wallpapers (directory-files "~/wallpapers" nil "^[^.].*"))) - (thanos/wallpaper-set (nth (random (length wallpapers)) wallpapers)))) - -(defun thanos/wallpaper-select () - "Set wallpaper." - (interactive) - (let ((wallpaper (completing-read "Choose wallpaper: " (directory-files wallpapers-dir nil "^[^.].*")))) - (thanos/wallpaper-set wallpaper))) - -(defvar-keymap thanos/applications-map - :doc "Thanos commonly used programs" - "t" #'thanos/load-theme - "w" #'thanos/wallpaper-select - "C-c" thanos/create-map) - -(define-key global-map (kbd "C-c a") thanos/applications-map) - - -(defun dired-watch-video () - "Watch play file with mpv." - (interactive) - (call-process-shell-command - (format "mpv \"%s\"" (dired-get-filename)) nil 0)) - -(defun dired-set-wallpaper () - "Set NAME as wallpaper using feh." - (interactive) - (let ((command (if is-zeus "xwallpaper --output DisplayPort-1 --stretch" "feh --bg-scale"))) - (call-process-shell-command - (format "%s %s" command (dired-get-filename)) nil 0))) - -(defun dired-delete-files-except () - "Delete all files inside directory except match." - (interactive) - (let* ((directory (read-directory-name "Select directory: ")) - (files (directory-files directory t)) - (except-match (read-string "Except the ones that have: "))) - (dolist (file files) - (unless (or (string= "." (substring file -1)) - (string= ".." (substring file -2)) - (string-match except-match file)) - (dired-delete-file file t))))) - -(defun dired-delete-file-match () - "Delete all files inside directory except match." - (interactive) - (let* ((directory (read-directory-name "Select directory: ")) - (files (directory-files directory t)) - (match (read-string "Delete files that match: "))) - (dolist (file files) - (when (string-match-p match file) - (dired-delete-file file t))))) - -(defun dired-rename-capitalize-file () - "Capitalize the base name of the file at point in a Dired buffer." - (interactive) - (let* ((file (dired-get-file-for-visit)) - (new-file (capitalize (file-name-nondirectory file)))) - (if (string-prefix-p "." file) - (message "Skipping file starting with '.'") - (progn - (rename-file file (concat (file-name-directory file) new-file)) - (revert-buffer) - (message "Renamed %s to %s" file new-file))))) - -(defun thanos/0x0-upload-file () - "Update file to 0x0.st" - (interactive) - (async-shell-command (format "curl -F'file=@%s' https://0x0.st" (dired-get-filename)))) - -;; yeetube -(defun yeetube-download-videos-ffmpeg () - "Download videos using ffmpeg." - (interactive) - (let ((url "") - (name "") - (download-counter 1) - (stored-contents nil)) - ;; Read links and names until "q" is entered - (while (not (string= url "q")) - (setf url (read-string "Enter URL (q to quit): ")) - (unless (string= url "q") - (setf name (read-string (format "Custom name (download counter: %d) " download-counter))) - (push (cons url name) stored-contents) - (setf download-counter (1+ download-counter)))) - ;; Process the collected links and names - (dolist (pair stored-contents) - (let ((url (car pair)) - (name (cdr pair))) - (async-shell-command - (format - "ffmpeg -protocol_whitelist file,crypto,data,https,tls,tcp -stats -i '%s' -codec copy '%s.mp4'" - url name)))))) - -(defun yeetube-download-vimeo-videos () - "Download videos from vimeo services." - (interactive) - (let ((url "") - (name "") - (download-counter 1)) - (while (not (string= url "q")) - (setf url (read-string "Enter URL (q to quit): ")) - (unless (string= url "q") - (setf name (read-string (format "Custom name (download counter: %d) " download-counter))) - (setf download-counter (1+ download-counter)) - (call-process-shell-command - (format - "yt-dlp '%s' -o '%s'" - (replace-regexp-in-string "\\.json" ".m3u8" url) name) - nil 0))))) - -;; Input methods -(defvar thanos/input-methods - '("greek" "bulgarian-phonetic" "nil") - "List of input methods to toggle.") - -(defvar thanos/input-methods-index 0 - "Index of the next input method in `thanos/input-methods' to use.") - -(defun thanos/toggle-input-method () - "Switch to the next input method in `thanos/input-methods'." - (interactive) - (setf thanos/input-methods-index - (mod (1+ thanos/input-methods-index) (length thanos/input-methods))) - (let ((input-method (nth thanos/input-methods-index thanos/input-methods))) - (set-input-method (if (string= "nil" input-method) nil input-method)))) - -(defun thanos/toggle-input-method () - "Switch to the next input method in `thanos/input-methods'." - (interactive) - (setf thanos/input-methods-index - (mod (1+ thanos/input-methods-index) (length thanos/input-methods))) - (let ((input-method (nth thanos/input-methods-index thanos/input-methods))) - (set-input-method (if (string= "nil" input-method) nil input-method)))) - -(defun erc-libera () - "Login to liberachat with erc." - (interactive) - (erc :server (password-store-get-field "znc/admin" "server") - :port (password-store-get-field "znc/admin" "port") - :user (password-store-get-field "znc/admin" "user") - :password (password-store-get "znc/admin"))) - - -(defun thanos/iimage-mode-buffer (arg) - "Display images if ARG is non-nil, undisplay them otherwise." - (let ((image-path (cons default-directory iimage-mode-image-search-path)) - (edges (window-inside-pixel-edges (get-buffer-window))) - file) - (with-silent-modifications - (save-excursion - (dolist (pair iimage-mode-image-regex-alist) - (goto-char (point-min)) - (while (re-search-forward (car pair) nil t) - (when (and (setq file (match-string (cdr pair))) - (setq file (locate-file file image-path))) - (if arg - (add-text-properties - (match-beginning 0) (match-end 0) - `(display - ,(create-image file nil nil - :max-width 120 - :max-height 120) - keymap ,image-map - modification-hooks - (iimage-modification-hook))) - (remove-list-of-text-properties - (match-beginning 0) (match-end 0) - '(display modification-hooks)))))))))) - -(define-minor-mode thanos/iimage-mode nil - :group 'iimage :lighter " iImg" - (thanos/iimage-mode-buffer thanos/iimage-mode)) - -(provide 'thanos-commands) -;;; thanos-commands.el ends here diff --git a/.emacs.d/modules/thanos-mu4e.el b/.emacs.d/modules/thanos-mu4e.el deleted file mode 100644 index 77b2856..0000000 --- a/.emacs.d/modules/thanos-mu4e.el +++ /dev/null @@ -1,132 +0,0 @@ -;;; thanos-mu4e.el --- mu4e configuration -*- lexical-binding: t; -*- - -;; Copyright (C) 2023 Thanos Apollo - -;; Author: Thanos Apollo <[email protected]> -;; Keywords: extensions - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: -;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ -;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ -;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ -;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ -;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ -;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ -;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ -;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ -;;; Code: - -(require 'smtpmail) -(require 'server) - -(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e/") -(require 'mu4e) - -(setf mu4e-get-mail-command "mbsync -a") - -(when (and is-zeus (server-running-p)) - (setf mu4e-update-interval (* 10 60))) - -(defun set-mu4e-context (context-name full-name mail-address signature) - "Return a mu4e context named CONTEXT-NAME with :match-func matching - folder name CONTEXT-NAME in Maildir. The context's `user-mail-address', - `user-full-name' and `mu4e-compose-signature'`smtpmail-smpt-server' is set to MAIL-ADDRESS - FULL-NAME SIGNATURE and SERVER respectively. - Special folders are set to context specific folders." - (let ((dir-name (concat "/" context-name))) - (make-mu4e-context - :name context-name - ;; we match based on the maildir of the message - :match-func - `(lambda (msg) - (when msg - (string-match-p - ,(concat "^" dir-name) - (mu4e-message-field msg :maildir)))) - :vars - `((user-mail-address . ,mail-address) - (user-full-name . ,full-name) - (mu4e-sent-folder . ,(concat dir-name "/Sent")) - (mu4e-drafts-folder . ,(concat dir-name "/Drafts")) - (mu4e-trash-folder . ,(concat dir-name "/Trash")) - (mu4e-trash-folder . ,(concat dir-name "/Starred")) - (mu4e-refile-folder . ,(concat dir-name "/Archive")) - (mu4e-compose-signature . ,signature))))) -;;Fixing duplicate UID errors when using mbsync and mu4e -(setf mu4e-change-filenames-when-moving t) - -(setf mu4e-maildir-shortcuts - '(("/Fastmail/Inbox" . ?i) - ("/Drafts" . ?d) - ("/Sent" . ?s) - ("/Fastmail/Emacs/dev" . ?e) - ("/MUSofia/[Gmail]/All Mail" . ?u) - ("/Fastmail/Gentoo" . ?g))) - -(setf mu4e-contexts - (list - (make-mu4e-context - :name "Public" - :match-func - (lambda (msg) - (when msg - (string-prefix-p "/Fastmail" (mu4e-message-field msg :maildir)))) - :vars '((user-mail-address . "[email protected]") - (user-full-name . "Thanos Apollo") - (smtpmail-smtp-server . "smtp.fastmail.com") - (smtpmail-smtp-service . 465) - (smtpmail-stream-type . ssl) - (mu4e-drafts-folder . "/Drafts") - (mu4e-sent-folder . "/Sent") - (mu4e-refile-folder . "/Archive") - (mu4e-trash-folder . "/Trash"))) - (make-mu4e-context - :name "MUSofia" - :match-func - (lambda (msg) - (when msg - (string-prefix-p "/MUSofia" (mu4e-message-field msg :maildir)))) - :vars '((user-mail-address . "[email protected]") - (user-full-name . "Thanos Apollo") - (smtpmail-smtp-server . "smtp.gmail.com") - (smtpmail-smtp-service . 465) - (smtpmail-stream-type . ssl))))) - -(setf message-send-mail-function 'smtpmail-send-it - mu4e-compose-signature "\nThanos Apollo\n \nhttps://thanosapollo.org\n -62B7 58D0 F671 9938 BC09 CECA 339F 736C 3A72 0928\n" - mu4e-compose-context-policy 'ask) - -(setf mu4e-view-actions - (delete-dups - (append - '(("gapply git patches" . mu4e-action-git-apply-patch) - ("mgit am patch" . mu4e-action-git-apply-mbox) - ("bb4 am patch" . mu4e-action-git-apply-b4) - ("ssetup reword list with b4" . mu4e-action-setup-reword-b4) - ("crun checkpatch script" . my-mu4e-action-run-check-patch) - ("MCheck if merged" . my-mu4e-action-check-if-merged))))) - -(add-hook 'mu4e-main-mode-hook #'(lambda () - (display-line-numbers-mode -1) - (auto-save-mode -1))) -;; Sign messages -(add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime) - -(define-key global-map (kbd "C-x m") 'mu4e) - -(provide 'thanos-mu4e) -;;; thanos-mu4e.el ends here diff --git a/.emacs.d/modules/thanos-pass.el b/.emacs.d/modules/thanos-pass.el deleted file mode 100644 index 0e996f6..0000000 --- a/.emacs.d/modules/thanos-pass.el +++ /dev/null @@ -1,91 +0,0 @@ -;;; thanos-pass.el --- Pass configuration -*- lexical-binding: t; -*- - -;; Copyright (C) 2023 Thanos Apollo - -;; Author: Thanos Apollo <[email protected]> - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: -;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ -;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ -;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ -;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ -;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ -;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ -;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ -;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ -;;; Code: - -(require 'password-store) - -(setf password-store-password-length (+ 20 (random 20))) - -(defun thanos/pass-launcher () - "Launch Emacs as a front-end for pass." - (interactive) - (unwind-protect - (with-selected-frame - (make-frame '((name . "thanos/pass-launcher") - (fullscreen . 0) - (undecorated . t) - (minibuffer . only) - (width . 70) - (height . 15))) - (let* ((choice (completing-read "Choose an action: " - '("AUTO" "COPY PASS" "COPY USERNAME" "EDIT" "GENERATE"))) - (action (pcase choice - ("AUTO" #'(lambda (entry) (let ((user (password-store-get-field entry "user")) (pass (password-store-get entry))) - (start-process-shell-command - "xdotool" nil - (format "sleep 0.3 && xdotool getactivewindow type '%s' && xdotool getactivewindow key Tab && xdotool getactivewindow type '%s'" - (if user user 'thanosapollo) pass))))) - ("COPY PASS" #'password-store-copy) - ("COPY USERNAME" #'(lambda (entry) (password-store-copy-field entry "user"))) - ("EDIT" #'password-store-edit) - ("GENERATE" #'password-store-generate)))) - (funcall action (completing-read "Search: " (password-store-list))) - (delete-frame))))) - -(defun smtp-get-pass () - "Get password for smtp." - (interactive) - (password-store-copy-field "fastmail.com/[email protected]" "smtp")) - -(define-prefix-command 'thanos/pass) -(global-set-key (kbd "C-c p") 'thanos/pass) -(define-key thanos/pass (kbd "i") 'password-store-insert) -(define-key thanos/pass (kbd "e") 'password-store-edit) -(define-key thanos/pass (kbd "g") 'password-store-generate) -(define-key thanos/pass (kbd "c") 'password-store-copy) -(define-key thanos/pass (kbd "s") 'smtp-get-pass) - -(defun thanos/app-launcher () - "Launch Emacs as an Application Launcher." - (interactive) - (let ((ivy-height 100)) - (unwind-protect - (with-selected-frame - (make-frame '((name . "thanos/emacs-launcher") - (minibuffer . only) - (fullscreen . 0) - (undecorated . t) - (internal-border-width . 10) - (width . 80) - (height . 11))) - (counsel-linux-app) - (delete-frame))))) - -(provide 'thanos-pass) -;;; thanos-pass.el ends here @@ -51,4 +51,4 @@ Expunge None CopyArrivalDate yes Sync All Create Both -SyncState * +SyncState *
\ No newline at end of file diff --git a/.moc/config b/.moc/config deleted file mode 100644 index 497eafe..0000000 --- a/.moc/config +++ /dev/null @@ -1,704 +0,0 @@ -# This is a configuration file for the MOC player. It should be named -# 'config' and placed in the ~/.moc directory. As this file can specify -# commands which invoke other applications, MOC will refuse to start if it -# is not owned by either root or the current user, or if it is writable by -# anyone other than its owner. All options are given with their default -# values, and therefore commented. - -# Comments begin with '#'. -# You can use quotes and escape ('\') in parameters. -# -# You can have variable values substituted by enclosing the variable name -# as "${...}". (This only applies to the portion of the option following -# the '='.) Variables are substituted first from the environment then, -# if not found, from the configuration options. (Note that the value of -# a configuration option substituted is that which it has at the time the -# substitution variable is encountered.) If there is a naming conflict -# between an environment and configuration variable, you may be able to -# resolve it by using lowercase as the environment variable matches are -# case-sensitive whereas the configuration variables are not. -# -# You can also use the form "${...:-...}" where the value in the second -# position will be substituted if the variable name given in the first -# position is unset or null. -# -# So, for example: -# -# MusicDir = /music/${USER:-public} -# Fastdir1 = ${MusicDir}/mp3/rock -# Fastdir2 = ${MusicDir}/mp3/electronic -# Fastdir3 = ${MusicDir}/mp3/rap -# Fastdir4 = ${MusicDir}/mp3/etc -# -# Variable names are limited to those accepted by the BASH shell; that -# is, those comprising the upper- and lowercase ASCII characters, digits -# and the underscore. -# -# If you need to use the "${" sequence for any other purpose, write "$${" -# and it will be replaced by "${" and not treated as a substitution. -# -# Some options take lists of strings as their values. The strings are -# separated by colons. Additional strings can be appended to the list -# using "+=" in place of a plain "=" to assign the value. For an example, -# see the XTerms option. -# -# You can override any configuration option when you run MOC using the -# '-O' command line option: -# -# mocp -O AutoNext=no -O messagelingertime=1 -O XTerms+=xxt:xwt -# -# This command line option can be repeated as many times as needed and -# the configuration option name is not case sensitive. (Note that MOC -# does not perform variable substitution on the value of such overridden -# configuration options.) Most option values are set before the -# configuration file is processed (which allows the new values to be -# picked up by substitutions), however list-valued options are overridden -# afterwards (which gives the choice of whether the configured values are -# replaced or added to). - -# Remember that the client and server are separate processes and the -# server will retain the configuration values formed from the environment -# within which it was originally started. - -# Show file titles (title, author, album) instead of file names? -#ReadTags = yes - -# In which directory do you store your music files? If you specify it -# you will be able to jump straight to this directory with the '-m' -# parameter or the 'm' command. This can also point to a playlist. -# -# Example: MusicDir = "/home/joe/music" -# -MusicDir = "/hdd/Music" - -# Start in the music directory by default? If set to 'no', start -# in the current directory by default. A single directory on -# the command line takes precedence. -StartInMusicDir = yes - -# The number of lines which are retained in an in-memory circular logging -# buffer. A value of zero indicates that lines will be written directly -# to the log file, otherwise the latest CircularLogSize lines are retained -# in memory and not written to the log file until the MOC client or server -# are shutdown. If the client or server terminates abnormally then the -# log lines are lost. -# -# This option is intended to help identify problems which occur infrequently -# and for which the amount of disk space consumed by logging would otherwise -# be a limiting factor. Obviously the memory footprint will increase in -# proportion to the value of this option. -#CircularLogSize = 0 - -# How to sort? FileName is the option's only value for now. -#Sort = FileName - -# Show errors in the streams (for example, broken frames in MP3 files)? -#ShowStreamErrors = no - -# Ignore CRC errors in MP3 files? Most players do that, so the default -# value is 'yes'. -#MP3IgnoreCRCErrors = yes - -# Set playback toggles. -#Repeat = no -#Shuffle = no -#AutoNext = yes - -# Default FormatString: -# -# %n - Track number -# %a - Artist -# %A - Album -# %t - Title -# %(X:TRUE:FALSE) - Ternary expression: if X exists, do TRUE, -# otherwise FALSE. The escape character must -# be doubled (i.e., '\\'). (See zshmisc -# documentation for more information.) -# -#FormatString = "%(n:%n :)%(a:%a - :)%(t:%t:)%(A: \(%A\):)" - -# Input and output buffer sizes (in kilobytes). -#InputBuffer = 512 # Minimum value is 32KB -#OutputBuffer = 512 # Minimum value is 128KB - -# How much to fill the input buffer before playing (in kilobytes)? -# This can't be greater than the value of InputBuffer. While this has -# a positive effect for network streams, it also causes the broadcast -# audio to be delayed. -#Prebuffering = 64 - -# Use this HTTP proxy server for internet streams. If not set, the -# environment variables http_proxy and ALL_PROXY will be used if present. -# -# Format: HTTPProxy = PROXY_NAME:PORT -# -#HTTPProxy = - -# Sound driver - OSS, ALSA, JACK, SNDIO (on OpenBSD) or null (only for -# debugging). You can enter more than one driver as a colon-separated -# list. The first working driver will be used. -#SoundDriver = JACK:ALSA:OSS - -# Jack output settings. -#JackClientName = "moc" -#JackStartServer = no -#JackOutLeft = "system:playback_1" -#JackOutRight = "system:playback_2" - -# OSS output settings. -#OSSDevice = /dev/dsp -#OSSMixerDevice = /dev/mixer -#OSSMixerChannel1 = pcm # 'pcm', 'master' or 'speaker' -#OSSMixerChannel2 = master # 'pcm', 'master' or 'speaker' - -# ALSA output settings. If you need to dump the audio produced by MOC -# to a file for diagnostic purposes, the following setting of 'ALSADevice' -# should do that: -# -# ALSADevice=tee:hw,'/tmp/out.wav',wav -# -#ALSADevice = default -#ALSAMixer1 = PCM -#ALSAMixer2 = Master - -# Under some circumstances on 32-bit systems, audio played continously -# for long periods of time may begin to stutter. Setting this option to -# 'yes' will force MOC to avoid ALSA's dmix resampling and prevent this -# stutter. But it also has other implications: -# -# - You may experience unacceptably high CPU load. -# - ALSA's resampler plug-ins will not be used. -# - The resampling may be of lower quality than ALSA would provide. -# - You may need to try different "ResampleMethod" option settings. -# - The "ForceSampleRate" option may be ineffective. -# - If libsamplerate is not configured, many audios may be unplayable. -# -#ALSAStutterDefeat = no - -# Save software mixer state? -# If enabled, a file 'softmixer' will be created in '~/.moc/' storing the -# mixersetting set when the server is shut down. -# Note that there is a "hidden" 'Amplification' setting in that file. -# Amplification (0-200) is used to scale the mixer setting (0-100). This -# results in a higher signal amplitude but may also produce clipping. -#Softmixer_SaveState = yes - -# Save equalizer state? -# If enabled, a file 'equalizer' will be created in '~/.moc/' storing the -# equalizer settings when the server is shut down. -# Note that there is a "hidden" 'Mixin' setting in that file. -# Mixin (0.0-1.0) is used to determine how much of the original signal is -# used after equalizing. 0 means to only use the equalized sound, while 1 -# effectively disabled the mixer. The default is 0.25. -#Equalizer_SaveState = yes - -# Show files with dot at the beginning? -#ShowHiddenFiles = no - -# Hide file name extensions? -#HideFileExtension = no - -# Show file format in menu? -#ShowFormat = yes - -# Show file time in menu? Possible values: 'yes', 'no' and 'IfAvailable' -# (meaning show the time only when it is already known, which often works -# faster). -#ShowTime = IfAvailable - -# Show time played as a percentage in the time progress bar. -#ShowTimePercent = no - -# Values of the TERM environment variable which are deemed to be managed by -# screen(1). If you are setting a specific terminal using screen(1)'s -# '-T <term>' option, then you will need to add 'screen.<term>' to this list. -# Note that this is only a partial test; the value of the WINDOW environment -# variable must also be a number (which screen(1) sets). -#ScreenTerms = screen:screen-w:vt100 - -# Values of the TERM environment variable which are deemed to be xterms. If -# you are using MOC within screen(1) under an xterm, then add screen(1)'s -# TERM setting here as well to cause MOC to update the xterm's title. -#XTerms = xterm -#XTerms += xterm-colour:xterm-color -#XTerms += xterm-256colour:xterm-256color -#XTerms += rxvt:rxvt-unicode -#XTerms += rxvt-unicode-256colour:rxvt-unicode-256color -#XTerms += eterm - -# Theme file to use. This can be absolute path or relative to -# /usr/share/moc/themes/ (depends on installation prefix) or -# ~/.moc/themes/ . -# -# Example: Theme = laras_theme -# -Theme = orange - -# The theme used when running on an xterm. -# -# Example: XTermTheme = transparent-background -# -#XTermTheme = - -# Should MOC try to autoload the default lyrics file for an audio? (The -# default lyrics file is a text file with the same file name as the audio -# file name with any trailing "extension" removed.) -#AutoLoadLyrics = yes - -# MOC directory (where pid file, socket and state files are stored). -# You can use ~ at the beginning. -#MOCDir = ~/.moc - -# Use mmap() to read files. mmap() is much slower on NFS. -#UseMMap = no - -# Use MIME to identify audio files. This can make for slower loading -# of playlists but is more accurate than using "extensions". -#UseMimeMagic = no - -# Assume this encoding for ID3 version 1/1.1 tags (MP3 files). Unlike -# ID3v2, UTF-8 is not used here and MOC can't guess how tags are encoded. -# Another solution is using librcc (see the next option). This option is -# ignored if UseRCC is set to 'yes'. -#ID3v1TagsEncoding = WINDOWS-1250 - -# Use librcc to fix ID3 version 1/1.1 tags encoding. -#UseRCC = yes - -# Use librcc to filenames and directory names encoding. -#UseRCCForFilesystem = yes - -# When this option is set the player assumes that if the encoding of -# ID3v2 is set to ISO-8859-1 then the ID3v1TagsEncoding is actually -# that and applies appropriate conversion. -#EnforceTagsEncoding = no - -# Enable the conversion of filenames from the local encoding to UTF-8. -#FileNamesIconv = no - -# Enable the conversion of the xterm title from UTF-8 to the local encoding. -#NonUTFXterm = no - -# Should MOC precache files to assist gapless playback? -#Precache = yes - -# Remember the playlist after exit? -#SavePlaylist = yes - -# When using more than one client (interface) at a time, do they share -# the playlist? -#SyncPlaylist = yes - -# Choose a keymap file (relative to '~/.moc/' or using an absolute path). -# An annotated example keymap file is included ('keymap.example'). -# -# Example: Keymap = my_keymap -# -Keymap = keymap.conf - -# Use ASCII rather than graphic characters for drawing lines. This -# helps on some terminals. -#ASCIILines = no - -# FastDirs, these allow you to jump directly to a directory, the key -# bindings are in the keymap file. -# -# Examples: Fastdir1 = /mp3/rock -# Fastdir2 = /mp3/electronic -# Fastdir3 = /mp3/rap -# Fastdir4 = /mp3/etc -# -#Fastdir1 = -#Fastdir2 = -#Fastdir3 = -#Fastdir4 = -#Fastdir5 = -#Fastdir6 = -#Fastdir7 = -#Fastdir8 = -#Fastdir9 = -#Fastdir10 = - -# How fast to seek (in number of seconds per keystroke). The first -# option is for normal seek and the second for silent seek. -#SeekTime = 1 -#SilentSeekTime = 5 - -# PreferredDecoders allows you to specify which decoder should be used -# for any given audio format. It is a colon-separated list in which -# each entry is of the general form 'code(decoders)', where 'code' -# identifies the audio format and 'decoders' is a comma-separated list -# of decoders in order of preference. -# -# The audio format identifier may be either a filename extension or a -# MIME media type. If the latter, the format is 'type/subtype' (e.g., -# 'audio/flac'). Because different systems may give different MIME -# media types, any 'x-' prefix of the subtype is ignored both here and -# in the actual file MIME type (so all combinations of 'audio/flac' and -# 'audio/x-flac' match each other). -# -# For Internet streams the matching is done on MIME media type and on -# actual content. For files the matches are made on MIME media type -# (if the 'UseMimeMagic' option is set) and on filename extension. The -# MIME media type of a file is not determined until the first entry for -# MIME is encountered in the list. -# -# The matching is done in the order of appearance in the list with any -# entries added from the command line being matched before those listed -# here. Therefore, if you place all filename extension entries before -# all MIME entries you will speed up MOC's processing of directories -# (which could be significant for remote file systems). -# -# The decoder list may be empty, in which case no decoders will be used -# for files (and files with that audio format ignored) while Internet -# streams will be assessed on the actual content. Any decoder position -# may contain an asterisk, in which case any decoder not otherwise listed -# which can handle the audio format will be used. It is not an error to -# list the same decoder twice, but neither does it make sense to do so. -# -# If you have a mix of audio and non-audio files in your directories, you -# may wish to include entries at top of the list which ignore non-audio -# files by extension. -# -# In summary, the PreferredDecoders option provides fine control over the -# type of matching which is performed (filename extension, MIME media -# type and streamed media content) and which decoder(s) (if any) are used -# based on the option's list entries and their ordering. -# -# Examples: aac(aac,ffmpeg) first try FAAD2 for AACs then FFmpeg -# mp3() ignore MP3 files -# wav(*,sndfile) use sndfile for WAV as a last resort -# ogg(vorbis,*):flac(flac,*) try Xiph decoders first -# ogg():audio/ogg() ignore OGG files, and -# force Internet selection by content -# gz():html() ignore some non-audio files -# -# Any unspecified audio formats default to trying all decoders. -# Any unknown (or misspelt) drivers are ignored. -# All names are case insensitive. -# The default setting reflects the historical situation modified by -# the experience of users. -# -#PreferredDecoders = aac(aac,ffmpeg):m4a(ffmpeg) -#PreferredDecoders += mpc(musepack,*,ffmpeg):mpc8(musepack,*,ffmpeg) -#PreferredDecoders += sid(sidplay2):mus(sidplay2) -#PreferredDecoders += wav(sndfile,*,ffmpeg) -#PreferredDecoders += wv(wavpack,*,ffmpeg) -#PreferredDecoders += audio/aac(aac):audio/aacp(aac):audio/m4a(ffmpeg) -#PreferredDecoders += audio/wav(sndfile,*) - -# The following PreferredDecoders attempt to handle the ambiguity surrounding -# container types such as OGG for files. The first two entries will force -# a local file to the correct decoder (assuming the .ogg file contains Vorbis -# audio), while the MIME media types will cause Internet audio streams to -# be assessed on content (which may be either Vorbis or Speex). -# -#PreferredDecoders += ogg(vorbis,*,ffmpeg):oga(vorbis,*,ffmpeg):ogv(ffmpeg) -#PreferredDecoders += application/ogg(vorbis):audio/ogg(vorbis) -#PreferredDecoders += flac(flac,*,ffmpeg) -#PreferredDecoders += opus(ffmpeg) -#PreferredDecoders += spx(speex) - -# Which resampling method to use. There are a few methods of resampling -# sound supported by libresamplerate. The default is 'Linear') which is -# also the fastest. A better description can be found at: -# -# http://www.mega-nerd.com/libsamplerate/api_misc.html#Converters -# -# but briefly, the following methods are based on bandlimited interpolation -# and are higher quality, but also slower: -# -# SincBestQuality - really slow (I know you probably have an xx GHz -# processor, but it's still not enough to not see -# this in the top output :) The worst case -# Signal-to-Noise Ratio is 97dB. -# SincMediumQuality - much faster. -# SincFastest - the fastest bandlimited interpolation. -# -# And these are lower quality, but much faster methods: -# -# ZeroOrderHold - really poor quality, but it's really fast. -# Linear - a bit better and a bit slower. -# -#ResampleMethod = Linear - -# Always use this sample rate (in Hz) when opening the audio device (and -# resample the sound if necessary). When set to 0 the device is opened -# with the file's rate. -#ForceSampleRate = 0 - -# By default, even if the sound card reports that it can output 24bit samples -# MOC converts 24bit PCM to 16bit. Setting this option to 'yes' allows MOC -# to use 24bit output. (The MP3 decoder, for example, uses this format.) -# This is disabled by default because there were reports that it prevents -# MP3 files from playing on some soundcards. -#Allow24bitOutput = no - -# Use realtime priority for output buffer thread. This will prevent gaps -# while playing even with heavy load. The user who runs MOC must have -# permissions to set such a priority. This could be dangerous, because it -# is possible that a bug in MOC will freeze your computer. -#UseRealtimePriority = no - -# The number of audio files for which MOC will cache tags. When this limit -# is reached, file tags are discarded on a least recently used basis (with -# one second resolution). You can disable the cache by giving it a size of -# zero. Note that if you decrease the cache size below the number of items -# currently in the cache, the number will not decrease immediately (if at -# all). -#TagsCacheSize = 256 - -# Number items in the playlist. -#PlaylistNumbering = yes - -# Main window layouts can be configured. You can change the position and -# size of the menus (directory and playlist). You have three layouts and -# can switch between then using the 'l' key (standard mapping). By default, -# only two layouts are configured. -# -# The format is as follows: -# -# - Each layout is described as a list of menu entries. -# - Each menu entry is of the form: -# -# menu(position_x, position_y, width, height) -# -# where 'menu' is either 'directory' or 'playlist'. -# - The parameters define position and size of the menu. They can -# be absolute numbers (like 10) or a percentage of the screen size -# (like 45%). -# - 'width' and 'height' can have also value of 'FILL' which means -# fill the screen from the menu's position to the border. -# - Menus may overlap. -# -# You must describe at least one menu (default is to fill the whole window). -# There must be at least one layout (Layout1) defined; others can be empty. -# -# Example: Layout1 = playlist(50%,50%,50%,50%) -# Layout2 = "" -# Layout3 = "" -# -# Just one layout, the directory will occupy the whole -# screen, the playlist will have 1/4 of the screen size -# and be positioned at lower right corner. (Note that -# because the playlist will be hidden by the directory -# you will have to use the TAB key to make the playlist -# visible.) -# -# Example: Layout1 = playlist(0,0,100%,10):directory(0,10,100%,FILL) -# -# The screen is split into two parts: playlist at the top -# and the directory menu at the bottom. Playlist will -# occupy 10 lines and the directory menu the rest. -# -#Layout1 = directory(0,0,50%,100%):playlist(50%,0,FILL,100%) -#Layout2 = directory(0,0,100%,100%):playlist(0,0,100%,100%) -#Layout3 = "" - -# When the song changes, should the menu be scrolled so that the currently -# played file is visible? -#FollowPlayedFile = yes - -# What to do if the interface was started and the server is already playing -# something from the playlist? If CanStartInPlaylist is set to 'yes', the -# interface will switch to the playlist. When set to 'no' it will start -# from the last directory. -#CanStartInPlaylist = yes - -# Executing external commands (1 - 10) invoked with key commands (F1 - F10 -# by default). -# -# Some arguments are substituted before executing: -# -# %f - file path -# %i - title made from tags -# %S - start block mark (in seconds) -# %E - end block mark (in seconds) -# -# Data from tags can also be substituted: -# -# %t - title -# %a - album -# %r - artist -# %n - track -# %m - time of the file (in seconds) -# -# The parameters above apply to the currently selected file. If you change -# them to capital letters, they are taken from the file currently playing. -# -# Programs are run using execv(), not a shell, so you can't do things like -# redirecting the output to a file. The command string is split using blank -# characters as separators; the first element is the command to be executed -# and the rest are its parameters, so if you use "echo Playing: %I" we run -# program 'echo' (from $PATH) with 2 parameters: the string 'Playing:' and -# the title of the file currently playing. Even if the title contains -# spaces, it's still one parameter and it's safe if it contains `rm -rf /`. -# -# Examples: ExecCommand1 = "cp %f /mnt/usb_drive" -# ExecCommand2 = "/home/joe/now_playing %I" -# -#ExecCommand1 = -#ExecCommand2 = -#ExecCommand3 = -#ExecCommand4 = -#ExecCommand5 = -#ExecCommand6 = -#ExecCommand7 = -#ExecCommand8 = -#ExecCommand9 = -#ExecCommand10 = - -# Display the cursor in the line with the selected file. Some braille -# readers (the Handy Tech modular series ZMU 737, for example) use the -# cursor to focus and can make use of it to present the file line even -# when other fields are changing. -#UseCursorSelection = no - -# Set the terminal title when running under xterm. -#SetXtermTitle = yes - -# Set the terminal title when running under screen(1). If MOC can detect -# that it is running under screen(1), then it will set an appropriate -# title (see description of ScreenTerms above). However, if multiple -# levels of screen management are involved, detection might fail and this -# could cause a screen upset. In that situation you can use this option -# to force screen titles off. -#SetScreenTitle = yes - -# Display full paths instead of just file names in the playlist. -#PlaylistFullPaths = yes - -# The following setting describes how block markers are displayed in -# the play time progress bar. Its value is a string of exactly three -# characters. The first character is displayed in a position which -# corresponds to the time marked as the start of a block and the last -# character to the time marked as the end of the block. The middle -# character is displayed instead if both the start and the end of the block -# would fall in the same position (within the resolution of the interface). -# You can turn off the displaying of these block marker positions by using -# three space characters. -#BlockDecorators = "`\"'" - -# How long (in seconds) to leave a message displayed on the screen. -# Setting this to a high value allows you to scroll through the messages -# using the 'hide_message' key. Setting it to zero means you'll have to -# be quick to see any message at all. Any new messages will be queued up -# and displayed after the current message's linger time expires. -#MessageLingerTime = 3 - -# Does MOC display a prefix on delayed messages indicating -# the number of queued messages still to be displayed? -#PrefixQueuedMessages = yes - -# String to append to the queued message count if any -# error messages are still waiting to be displayed. -#ErrorMessagesQueued = "!" - -# Self-describing ModPlug options (with 'yes' or 'no' values). -#ModPlug_Oversampling = yes -#ModPlug_NoiseReduction = yes -#ModPlug_Reverb = no -#ModPlug_MegaBass = no -#ModPlug_Surround = no - -# ModPlug resampling mode. -# Valid values are: -# -# FIR - 8 tap fir filter (extremely high quality) -# SPLINE - Cubic spline interpolation (high quality) -# LINEAR - Linear interpolation (fast, good quality) -# NEAREST - No interpolation (very fast, extremely bad sound quality) -# -#ModPlug_ResamplingMode = FIR - -# Other self-describing ModPlug audio characteristic options. -# (Note that the 32 bit sample size seems to be buggy.) -#ModPlug_Channels = 2 # 1 or 2 channels -#ModPlug_Bits = 16 # 8, 16 or 32 bits -#ModPlug_Frequency = 44100 # 11025, 22050, 44100 or 48000 Hz -#ModPlug_ReverbDepth = 0 # 0 (quiet) to 100 (loud) -#ModPlug_ReverbDelay = 0 # Delay in ms (usually 40-200ms) -#ModPlug_BassAmount = 0 # 0 (quiet) to 100 (loud). -#ModPlug_BassRange = 10 # Cutoff in Hz (10-100). -#ModPlug_SurroundDepth = 0 # Surround level 0(quiet)-100(heavy). -#ModPlug_SurroundDelay = 0 # Surround delay in ms, usually 5-40ms. -#ModPlug_LoopCount = 0 # 0 (never), n (times) or -1 (forever) - -# Self-describing TiMidity audio characteristic options. -#TiMidity_Rate = 44100 # Between 8000 and 48000 -#TiMidity_Bits = 16 # 8 or 16 -#TiMidity_Channels = 2 # 1 or 2 -#TiMidity_Volume = 100 # 0 to 800 - -# You can setup a TiMidity-Config-File here. -# Leave it unset to use library defaults (/etc/timidity.cfg mostly). -# Setting it to 'yes' also uses the library defaults. -# Set it to 'no' if you don't have any configuration file. -# Otherwise set it to the name of a specific file. -#TiMidity_Config = - -# Self-describing SidPlay2 audio characteristic options. -#SidPlay2_DefaultSongLength = 180 # If not in database (in seconds) -#SidPlay2_MinimumSongLength = 0 # Play at least n (in seconds) -#SidPlay2_Frequency = 44100 # 4000 to 48000 -#SidPlay2_Bits = 16 # 8 or 16 -#SidPlay2_Optimisation = 0 # 0 (worst quality) to 2 (best quality) - -# Set path to a HVSC-compatible database (if not set, database is disabled). -#SidPlay2_Database = - -# SidPlay2 playback Mode: -# -# "M": Mono (best for many SIDs) -# "S": Stereo -# "L"/"R": Left / Right -# -#SidPlay2_PlayMode = "M" - -# Use start-song information from SID ('yes') or start at first song -# ('no'). Songs before the start-song won't be played. -#SidPlay2_StartAtStart = yes - -# Play sub-tunes. -#SidPlay2_PlaySubTunes = yes - -# Run the OnSongChange command when a new song starts playing. -# Specify the full path (i.e. no leading '~') of an executable to run. -# Arguments will be passed, and you can use the following escapes: -# -# %a artist -# %r album -# %f filename -# %t title -# %n track -# %d file duration in XX:YY form -# %D file duration, number of seconds -# -# No pipes/redirects can be used directly, but writing a shell script -# can do the job. -# -# Example: OnSongChange = "/home/jack/.moc/myscript %a %r" -# -#OnSongChange = - -# If RepeatSongChange is 'yes' then MOC will execute the command every time -# a song starts playing regardless of whether or not it is just repeating. -# Otherwise the command will only be executed when a different song is -# started. -#RepeatSongChange = no - -# Run the OnStop command (full path, no arguments) when MOC changes state -# to stopped (i.e., when user stopped playing or changes a song). -# -# Example: OnStop = "/home/jack/.moc/myscript_on_stop" -# -#OnStop = - -# This option determines which song to play after finishing all the songs -# in the queue. Setting this to 'yes' causes MOC to play the song which -# follows the song being played before queue playing started. If set to -# 'no', MOC will play the song following the last song in the queue if it -# is in the playlist. The default is 'yes' because this is the way other -# players usually behave. (Note that this option previously took the -# values 1 and 0; these are now deprecated in favour of 'yes' and 'no'.) -#QueueNextSongReturn = yes
\ No newline at end of file diff --git a/.moc/keymap.conf b/.moc/keymap.conf deleted file mode 100644 index 84449a1..0000000 --- a/.moc/keymap.conf +++ /dev/null @@ -1,187 +0,0 @@ -# This is the example keymap file for MOC. You can define your own key -# bindings for MOC commands by creating your own keymap file and setting -# the 'Keymap' option in ~/.moc/config. -# -# The format of this file is: -# -# - Lines beginning with # are comments. -# - Blank lines are ignored. -# - Every other line is expected to be in one of the formats: -# -# COMMAND = [KEY ...] -# COMMAND += KEY ... -# -# The KEY can be: -# -# - Just a char, like i, L, ", * -# - CTRL-KEY sequence: ^k (CTRL-k), ^4 -# - ALT-KEY (meta) sequence: M-j (ALT-j), M-/ -# - Special keys: DOWN, UP -# LEFT, RIGHT -# HOME, END -# BACKSPACE -# INS, DEL -# ENTER -# PAGE_UP, PAGE_DOWN -# SPACE, TAB -# KEYPAD_CENTER -# ESCAPE -# F1 - F12 -# -# Note that the use of a digit as a KEY is deprecated. -# -# Maximum number of KEYs for one COMMAND is 5. -# -# Omitting the KEY for a COMMAND will unbind all its default keys. They -# will also be automatically unbound when you bind new KEYs to it. Individual -# default KEYs will be automatically unbound when they are explicitly bound -# to some other COMMAND. -# -# Using the '+=' form will cause the KEYs to be appended to any existing -# (default or explicit) bindings for the COMMAND. Appending an existing -# default binding for the same COMMAND will cause MOC to think of that KEY -# as then being explicitly bound. -# -# Only one binding for any given COMMAND can appear in the keymap file. One -# exception to this is that if the default keys for a COMMAND are explicitly -# unbound then a subsequent binding may appear for it. A second exception -# is that multiple appending bindings may appear. -# -# Meta-key detection is sensitive to the ESCDELAY environment variable (see -# the manpage for ncurses(3)). In its absence, MOC resets the default -# delay to 25ms. If you need to emulate meta-key sequences using the ESC -# key, then you may need to set the value of ESCDELAY back to its ncurses -# default of 1000ms (but doing so will make the response to the ESC key -# sluggish). -# -# If MOC's keypresses are being filtered through some other program (in a -# GUI environment, for example) which also does meta-key detection, then -# MOC is at the mercy of the timings with which that program presents them. -# -# Default key configuration for MOC (and a list of all available commands): - -# MOC control keys: -quit_client = q -quit = Q - -# Menu and interface control keys: -go = ENTER -menu_down = ^n -menu_up = ^p -menu_page_down = PAGE_DOWN -menu_page_up = PAGE_UP -menu_first_item = HOME -menu_last_item = END -search_menu = g / -toggle_read_tags = f -toggle_show_time = ^t -toggle_show_format = ^f -toggle_menu = TAB -toggle_layout = l -toggle_hidden_files = H -show_lyrics = L -theme_menu = T -help = h ? -refresh = ^r -reload = r - -# Audio playing and positioning keys: -seek_forward = RIGHT -seek_backward = LEFT -seek_forward_fast = ] -seek_backward_fast = [ -pause = SPACE -stop = s -next = N -previous = b -toggle_shuffle = S -toggle_repeat = R -toggle_auto_next = X -toggle_mixer = x -go_url = o - -# Volume control keys: -volume_down_1 = < -volume_up_1 = > -volume_down_5 = , -volume_up_5 = . -volume_10 = M-1 -volume_20 = M-2 -volume_30 = M-3 -volume_40 = M-4 -volume_50 = M-5 -volume_60 = M-6 -volume_70 = M-7 -volume_80 = M-8 -volume_90 = M-9 - -# Directory navigation keys: defaults are Shift-number -# (i.e., 'shift 1' -> '!' -> 'Fastdir1'). -go_to_a_directory = i -go_to_music_directory = m -go_to_fast_dir1 = ! -go_to_fast_dir2 = @ -go_to_fast_dir3 = # -go_to_fast_dir4 = $ -go_to_fast_dir5 = % -go_to_fast_dir6 = ^ -go_to_fast_dir7 = & -go_to_fast_dir8 = * -go_to_fast_dir9 = ( -go_to_fast_dir10 = ) -go_to_playing_file = G -go_up = U - -# Playlist specific keys: -add_file = a -add_directory = A -plist_add_stream = ^u -delete_from_playlist = d -playlist_full_paths = P -plist_move_up = u -plist_move_down = j -save_playlist = V -remove_dead_entries = Y -clear_playlist = C - -# Queue manipulation keys: -enqueue_file = z -clear_queue = Z - -# User interaction control: -history_up = f -history_down = b -delete_to_start = ^u -delete_to_end = ^k -cancel = ^x ESCAPE -hide_message = M - -# Softmixer specific keys: -toggle_softmixer = w -toggle_make_mono = J - -# Equalizer specific keys: -toggle_equalizer = E -equalizer_refresh = e -equalizer_prev = K -equalizer_next = k - -# External commands: -mark_start = ' -mark_end = " -exec_command1 = F1 -exec_command2 = F2 -exec_command3 = F3 -exec_command4 = F4 -exec_command5 = F5 -exec_command6 = F6 -exec_command7 = F7 -exec_command8 = F8 -exec_command9 = F9 -exec_command10 = F10 - -# The following commands are available but not assigned to any keys by -# default: -# -# toggle_percent Switch on/off play progress bar time percentage -# diff --git a/.moc/themes b/.moc/themes deleted file mode 160000 -Subproject 3578cd99a73e81a07749c1ed79fad998c6da084 diff --git a/.scripts/waybar-wttr.py b/.scripts/waybar-wttr.py deleted file mode 100755 index 08b49a6..0000000 --- a/.scripts/waybar-wttr.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python - -import json -import requests -from datetime import datetime - -WEATHER_CODES = { - '113': '☀️ ', - '116': '⛅ ', - '119': '☁️ ', - '122': '☁️ ', - '143': '☁️ ', - '176': '🌧️', - '179': '🌧️', - '182': '🌧️', - '185': '🌧️', - '200': '⛈️ ', - '227': '🌨️', - '230': '🌨️', - '248': '☁️ ', - '260': '☁️ ', - '263': '🌧️', - '266': '🌧️', - '281': '🌧️', - '284': '🌧️', - '293': '🌧️', - '296': '🌧️', - '299': '🌧️', - '302': '🌧️', - '305': '🌧️', - '308': '🌧️', - '311': '🌧️', - '314': '🌧️', - '317': '🌧️', - '320': '🌨️', - '323': '🌨️', - '326': '🌨️', - '329': '❄️ ', - '332': '❄️ ', - '335': '❄️ ', - '338': '❄️ ', - '350': '🌧️', - '353': '🌧️', - '356': '🌧️', - '359': '🌧️', - '362': '🌧️', - '365': '🌧️', - '368': '🌧️', - '371': '❄️', - '374': '🌨️', - '377': '🌨️', - '386': '🌨️', - '389': '🌨️', - '392': '🌧️', - '395': '❄️ ' -} - -data = {} - - -weather = requests.get("https://wttr.in/?format=j1").json() - - -def format_time(time): - return time.replace("00", "").zfill(2) - - -def format_temp(temp): - return (hour['FeelsLikeC']+"°").ljust(3) - - -def format_chances(hour): - chances = { - "chanceoffog": "Fog", - "chanceoffrost": "Frost", - "chanceofovercast": "Overcast", - "chanceofrain": "Rain", - "chanceofsnow": "Snow", - "chanceofsunshine": "Sunshine", - "chanceofthunder": "Thunder", - "chanceofwindy": "Wind" - } - - conditions = [] - for event in chances.keys(): - if int(hour[event]) > 0: - conditions.append(chances[event]+" "+hour[event]+"%") - return ", ".join(conditions) - -tempint = int(weather['current_condition'][0]['FeelsLikeC']) -extrachar = '' -if tempint > 0 and tempint < 10: - extrachar = '+' - - -data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \ - " "+extrachar+weather['current_condition'][0]['FeelsLikeC']+"°" - -data['tooltip'] = f"<b>{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°</b>\n" -data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}°\n" -data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n" -data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" -for i, day in enumerate(weather['weather']): - data['tooltip'] += f"\n<b>" - if i == 0: - data['tooltip'] += "Today, " - if i == 1: - data['tooltip'] += "Tomorrow, " - data['tooltip'] += f"{day['date']}</b>\n" - data['tooltip'] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° " - data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n" - for hour in day['hourly']: - if i == 0: - if int(format_time(hour['time'])) < datetime.now().hour-2: - continue - data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeC'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n" - - -print(json.dumps(data)) diff --git a/.shells/alias.sh b/.shells/alias.sh deleted file mode 100644 index a7ace2e..0000000 --- a/.shells/alias.sh +++ /dev/null @@ -1,44 +0,0 @@ -alias grep='grep --color=auto' -alias anki='QTWEBENGINE_CHROMIUM_FLAGS="--disable-seccomp-filter-sandbox" anki' - -alias o="emacsclient -n" -alias clear='printf "\033c"' - -#git -alias ga='git add' -alias gaa='git add .' -alias gc='git commit -m' -alias gp='git push -u origin' -alias gpm='git push -u origin master' -alias gpd='git push -u origin developer' -alias gs='git status' -alias cpm='config push -u origin master' -alias ca='config add' -alias cs='config status' -alias cc='config commit -m' - -#pacman | yay -alias yeet='paru -Rsc' - -# weather -alias weather="curl wttr.in" - -alias ls='ls --color' -alias ll='ls -la --color' -alias sb='sudo systemctl start bluetooth' -alias mykeys='setxkbmap -option caps:escape' -alias logout='pkill -U $USER' -#alias neofetch='neofetch | lolcat' -alias b='bluetoothctl' -alias ba='bluetooth-autoconnect' -alias music='mocp' -alias ytd="yt-dlp" -alias c="pavucontrol" -alias r="ranger" -alias klight="brightnessctl --device='tpacpi::kbd_backlight' set 1" - -##yarn -alias sweb='BROWSER="firefox" yarn start' - -##flatpaks -alias fanki='flatpak run net.ankiweb.Anki' diff --git a/.shells/exports.sh b/.shells/exports.sh deleted file mode 100644 index aaf0f7d..0000000 --- a/.shells/exports.sh +++ /dev/null @@ -1,27 +0,0 @@ -# Export 'SHELL' to child processes. Programs such as 'screen' -# honor it and otherwise use /bin/sh. -export SHELL -export PATH -export PATH=/home/$USER/.local/bin:$PATH -export EDITOR="emacsclient" -export GIT_EDITOR="emacsclient" -export SBCL_HOME="/usr/lib/sbcl/" -export PATH=$PATH:~/.roswell/bin -export SBCL_HOME=/usr/local/lib/sbcl -export XDG_SESSION_TYPE=x11 -export OLLAMA_HOST=zeus:11434 - -## Python -export PYENV_ROOT="$HOME/.pyenv" -export PATH="$PYENV_ROOT/bin:$PATH" - -if [[ $- != *i* ]] -then - # We are being invoked from a non-interactive shell. If this - # is an SSH session (as in "ssh host command"), source - # /etc/profile so we get PATH and other essential variables. - [[ -n "$SSH_CLIENT" ]] && source /etc/profile - - # Don't do anything else. - return -fi diff --git a/.stow-local-ignore b/.stow-local-ignore deleted file mode 100644 index 8794dd1..0000000 --- a/.stow-local-ignore +++ /dev/null @@ -1,29 +0,0 @@ -# Comments and blank lines are allowed. - -images - -vimium-options.json - -RCS -.+,v - -^scripts$ - -CVS -\.\#.+ # CVS conflict files / emacs lock files -\.cvsignore - -\.svn -_darcs -\.hg - -\.git$ -\.gitmodules.* -.*\.org$ - -.+~ # emacs backup files -\#.*\# # emacs autosave files - -^/README.* -^/LICENSE.* -^/COPYING
\ No newline at end of file diff --git a/.stumpwm.d/colors.lisp b/.stumpwm.d/colors.lisp deleted file mode 100644 index 9fa1cfd..0000000 --- a/.stumpwm.d/colors.lisp +++ /dev/null @@ -1,20 +0,0 @@ - -(defvar thanos-hope "#1c1d20") -(defvar thanos-hope-alt "#151619") -(defvar thanos-hope0 "#1B2229") -(defvar thanos-hope1 "#1c1f24") -(defvar thanos-hope2 "#202328") -(defvar thanos-hope3 "#23272e") -(defvar thanos-hope4 "#3f444a") -(defvar thanos-hope5 "#5B6268") -(defvar thanos-hope6 "#686b78") -(defvar thanos-hope7 "#9ca0a4") -(defvar thanos-hope8 "#DFDFDF") -(defvar thanos-hope-fg "#cbccd1") -(defvar thanos-hope-alt "#5B6268") - - -(defvar thanos-black-bg "#000000") -(defvar thanos-black-dim "#1e1e1e") -(defvar thanos-black-active "#535353") -(defvar thanos-black-inactive "#303030") diff --git a/.stumpwm.d/commands.lisp b/.stumpwm.d/commands.lisp deleted file mode 100644 index 1ad62a5..0000000 --- a/.stumpwm.d/commands.lisp +++ /dev/null @@ -1,60 +0,0 @@ - -(defmacro defnyxt-search (name search-url command) - `(stumpwm:defcommand ,(intern (concatenate 'string "nyxt-" name)) (query) - ((:string "Search: ")) - (stumpwm:run-shell-command - (concatenate 'string "nyxt -r -e '(" ,command "\"" ,search-url query "\"" ")'")))) - -(defvar duckduckgo "https://duckduckgo.com/?q=") -(defvar github "https://github.com/search?q=") - -(defnyxt-search "duck" duckduckgo "buffer-load") -(defnyxt-search "duck-newb" duckduckgo "set-url-new-buffer :url") -(defnyxt-search "http" "http://" "buffer-load") -(defnyxt-search "gh" github "buffer-load") - -;; Sly setup -(ql:quickload :slynk) - -(defcommand sly-start-server () () - "Start a slynk server for sly." - (sb-thread:make-thread (lambda () (slynk:create-server :dont-close t)))) - -(defcommand sly-stop-server () () - "Stop current slynk server for sly." - (sb-thread:make-thread (lambda () (slynk:stop-server 4005)))) - - -(defcommand firefox () () - "Run or raise Firefox." - (sb-thread:make-thread (lambda () (run-or-raise "firefox" '(:class "firefox") t nil)))) - -(defcommand delete-window-and-frame () () - "Delete the current frame with its window." - (delete-window) - (remove-split)) - -(defcommand hsplit-and-focus () () - "Create a new frame on the right and focus it." - (hsplit) - (move-focus :right)) - -(defcommand vsplit-and-focus () () - "Create a new frame below and move focus to it." - (vsplit) - (move-focus :down)) - -(defcommand term (&optional program) () - "Invoke a terminal, possibly with a @arg{program}." - (sb-thread:make-thread - (lambda () - (run-shell-command (if program - (format nil "kitty ~A" program) - "kitty"))))) - -(when *initializing* - (mapc #'run-shell-command - '("picom" - "transmission-daemon" - "xsetroot -cursor_name left_ptr")) - (thanos/set-wallpapers)) diff --git a/.stumpwm.d/init.lisp b/.stumpwm.d/init.lisp deleted file mode 100644 index ccbaf58..0000000 --- a/.stumpwm.d/init.lisp +++ /dev/null @@ -1,20 +0,0 @@ -(in-package :stumpwm) -(setf *default-package* :stumpwm) - -(when *initializing* - (grename "[ALPHA]") - (gnewbg "[BETA]") - (gnewbg-dynamic "[GAMMA]")) - -(clear-window-placement-rules) - -;; Utils -(load "~/.stumpwm.d/utils.lisp") -;; Theme -(load "~/.stumpwm.d/theme.lisp") -;; Commmands -(load "~/.stumpwm.d/commands.lisp") -;; Modeline -(load "~/.stumpwm.d/modeline.lisp") -;; Keybindings -(load "~/.stumpwm.d/keybindings.lisp") diff --git a/.stumpwm.d/keybindings.lisp b/.stumpwm.d/keybindings.lisp deleted file mode 100644 index 68e1655..0000000 --- a/.stumpwm.d/keybindings.lisp +++ /dev/null @@ -1,124 +0,0 @@ -(in-package :stumpwm) - -(defcommand colon1 (&optional (initial "")) (:rest) - (let ((cmd (read-one-line (current-screen) ": " :initial-input initial))) - (when cmd - (eval-command cmd t)))) - -;; Flaoting window control -(setf *mouse-focus-policy* :click - *float-window-modifier* :SUPER) - -;; Float -(define-key *top-map* (kbd "s-f") "float-this") -(define-key *top-map* (kbd "s-F") "unfloat-this") - -(define-key *root-map* (kbd "C-r") "exec rofi -show drun -modi drun -show-icons") -(define-key *root-map* (kbd ",") "exec flameshot gui") -(define-key *root-map* (kbd "M-r") "restart-hard") -(define-key *root-map* (kbd "p") "exec emacsclient -e '(thanos/pass-launcher)'") -(define-key *root-map* (kbd "b") "windowlist") -(define-key *root-map* (kbd "d") "delete-window") -(define-key *root-map* (kbd "C-d") "remove") -;; Focus -(define-key *root-map* (kbd "C-f") "move-focus right") -(define-key *root-map* (kbd "C-b") "move-focus left") - -(defvar *thanos-buffers-map* - (let ((m (make-sparse-keymap))) - (define-key m (kbd "0") "delete-window-and-frame") - (define-key m (kbd "3") "hsplit-and-focus") - (define-key m (kbd "b") "windowlist") - m)) - -(define-key *root-map* (kbd "C-x") *thanos-buffers-map*) -(define-key *root-map* (kbd "s") "hsplit-and-focus") -(define-key *root-map* (kbd "w") "windowlist") -(define-key *root-map* (kbd "k") "delete-window-and-frame") -(define-key *root-map* (kbd "S") "vsplit") -(define-key *root-map* (kbd "b") "global-windowlist") - -(define-key *root-map* (kbd "e") "exec emacsclient -c") - -(define-key *root-map* (kbd "C-e") "exec emacs") - -;; Lock screen -(define-key *root-map* (kbd "C-l") "exec slock") - -(define-key *top-map* (kbd "F11") "fullscreen") -;; Audio -(define-key *top-map* (kbd "XF86AudioLowerVolume") "execa mixer sset Master 5%-") -(define-key *top-map* (kbd "XF86AudioRaiseVolume") "exec amixer sset Master 5%+") - -;; x220 specific -(define-key *top-map* (kbd "F1") "exec brightnessctl --device='intel_backlight' set 5%-") -(define-key *top-map* (kbd "F2") "exec brightnessctl --device='intel_backlight' set +5%") -(define-key *top-map* (kbd "F3") "exec ~/.scripts/keyboard-light-x220.sh") - -;; Next -(define-key *top-map* (kbd "s-n") "fnext") - -;;Groups - -;; Switch to group -;; Root map -(define-key *root-map* (kbd "1") "gselect 1") -(define-key *root-map* (kbd "2") "gselect 2") -(define-key *root-map* (kbd "3") "gselect 3") -(define-key *root-map* (kbd "4") "gselect 4") -(define-key *root-map* (kbd "5") "gselect 5") -(define-key *root-map* (kbd "0") "gselect") -;; Move winodw -(define-key *root-map* (kbd "M-1") "gmove 1") -(define-key *root-map* (kbd "M-2") "gmove 2") -(define-key *root-map* (kbd "M-3") "gmove 3") -(define-key *root-map* (kbd "M-4") "gmove 4") -(define-key *root-map* (kbd "M-5") "gmove 5") -(define-key *root-map* (kbd "M-0") "gmove") -;; Top map, using super -(define-key *top-map* (kbd "s-1") "gselect 1") -(define-key *top-map* (kbd "s-2") "gselect 2") -(define-key *top-map* (kbd "s-3") "gselect 3") -(define-key *top-map* (kbd "s-4") "gselect 4") -(define-key *top-map* (kbd "s-5") "gselect 5") -(define-key *top-map* (kbd "s-6") "gselect 6") -(define-key *top-map* (kbd "s-7") "gselect 7") -(define-key *top-map* (kbd "s-0") "gselect 5") -(define-key *top-map* (kbd "s-9") "gselect") -;; Move window to group -(define-key *top-map* (kbd "s-!") "gmove 1") -(define-key *top-map* (kbd "s-@") "gmove 2") -(define-key *top-map* (kbd "s-#") "gmove 3") -(define-key *top-map* (kbd "s-$") "gmove 4") -(define-key *top-map* (kbd "s-%") "gmove 5") -(define-key *top-map* (kbd "s-^") "gmove 6") -(define-key *top-map* (kbd "s-)") "gmove 5") -(define-key *top-map* (kbd "s-(") "gmove") - -(define-key *root-map* (kbd "C-w") "gselect") - -;; Focus -(define-key *root-map* (kbd "M-b") "move-window left") -(define-key *root-map* (kbd "M-f") "move-window right") -(define-key *root-map* (kbd "M-n") "move-window down") - -;; Split & Focus -(define-key *root-map* (kbd "s") "hsplit-and-focus") - -;; Groups -(define-key *groups-map* (kbd "g") "gselect") - -;; Nyxt -;; (defvar *nyxt-map* (make-sparse-keymap)) -;; (define-key *root-map* (kbd "s") *nyxt-map*) - -;; (define-key *nyxt-map* (kbd "M-d") "nyxt-duck-newb") -;; (define-key *nyxt-map* (kbd "h") "nyxt-http") -;; (define-key *nyxt-map* (kbd "d") "nyxt-duck") -;; (define-key *nyxt-map* (kbd "g") "nyxt-gh") - - - -;; Productivity -(load-module "productivity") -(define-key *top-map* (kbd "F7") "productivity-mode-toggle") diff --git a/.stumpwm.d/modeline.lisp b/.stumpwm.d/modeline.lisp deleted file mode 100644 index 308186f..0000000 --- a/.stumpwm.d/modeline.lisp +++ /dev/null @@ -1,45 +0,0 @@ -;; Modeline configuration -(load "~/.stumpwm.d/colors.lisp") - -(setf *default-package* :stumpwm) - -(load-module "battery-portable") -;; (stumpwm:load-module "stumptray") -(load-module "mem") -(load-module "cpu") - -(setf *mode-line-timeout* 2) -(setf *group-format* "%t") -(setf *window-format* "%n: %30t") - -;; set modeline colors and highlight -(setf *mode-line-background-color* thanos-black-bg ;"#252B48" - *mode-line-foreground-color* thanos-hope-fg - *mode-line-border-color* thanos-black-bg - *mode-line-highlight-template* "«~A»" - mem::*mem-modeline-fmt* "%p" - cpu:*cpu-modeline-fmt* "%c") - -(setf *mode-line-border-color* thanos-black-bg - *mode-line-border-width* 2) - -(setf *time-modeline-string* "%a %d/%m/%Y | %H:%M") - -(setf stumpwm:*screen-mode-line-format* - (list "%g ^> %C " - '(:eval (string-trim '(#\Newline) - (stumpwm:run-shell-command - "echo $(($(cat /sys/class/thermal/thermal_zone0/temp) / 1000))C" t))) - "| RAM:%M| VOL:" - '(:eval (string-trim '(#\Newline) - (stumpwm:run-shell-command - "amixer get Master | awk '/Front Left:/ { print substr($5, 2, length($5)-2) }'" t))) - " | " - ;; Check when hermes(laptop) t display battery - (when (equal (asdf:hostname) "hermes") - "BAT:%B |") - "%d")) - - -(when stumpwm:*initializing* - (mode-line)) diff --git a/.stumpwm.d/modules b/.stumpwm.d/modules deleted file mode 160000 -Subproject 472bdef0acaac8893c9c5a38d4319da86f10c87 diff --git a/.stumpwm.d/theme.lisp b/.stumpwm.d/theme.lisp deleted file mode 100644 index 55691db..0000000 --- a/.stumpwm.d/theme.lisp +++ /dev/null @@ -1,64 +0,0 @@ -;; Startup message - -(setf *startup-message* "Welcome back, Thanos") -(stumpwm:load-module "swm-gaps") -;; Colors -(stumpwm:load-module "ttf-fonts") -(load "~/.stumpwm.d/colors.lisp") - -(run-shell-command "~/.config/autostart/autostart.sh ") - -;; Wallpaper -(defun feh-set-wallpaper (wallpaper-name) - "Set wallpaper using feh" - (let ((wallpaper-dir "~/wallpapers/")) - (format t "Setting wallpaper: ~a~%" wallpaper-name) - (run-shell-command (format nil "feh --bg-scale ~a~a" wallpaper-dir wallpaper-name)))) - -(defun thanos/set-wallpapers () - "Set wallpapers depending on hostname." - (cond ((equal (asdf:hostname) "zeus") (feh-set-wallpaper "winter-dragons.jpg")) - ((equal (asdf:hostname) "hermes") (feh-set-wallpaper "cyberpunk-wallpaper2.jpg")))) - - -;; (when *initializing* -;; (thanos/set-wallpapers)) - -(setf *message-window-gravity* :center - *input-window-gravity* :center - *window-border-style* :thin - *mouse-focus-policy* :click - *float-window-modifier* :META - *transient-border-width* 2 - *normal-size-border-width* 2 - *message-window-padding* 10 - *message-window-y-padding* 10) - -(when *initializing* - (update-color-map (current-screen))) - - -(set-border-color thanos-black-bg) -(set-focus-color thanos-black-active) -(set-unfocus-color thanos-black-inactive) -(set-float-focus-color thanos-hope1) -(set-float-unfocus-color thanos-hope3) - -(set-fg-color thanos-hope-fg) -(set-bg-color thanos-black-bg) - -(setf swm-gaps:*head-gaps-size* 6 - swm-gaps:*inner-gaps-size* 6 - swm-gaps:*outer-gaps-size* 6) - -(when stumpwm:*initializing* - (swm-gaps:toggle-gaps-on)) - -;; (ql:quickload :clx-truetype) - -(stumpwm:set-font - `(,(make-instance 'xft:font - :family "JetBrains Mono" - :subfamily "Regular" - :size 12 - :antialias t))) diff --git a/.stumpwm.d/utils.lisp b/.stumpwm.d/utils.lisp deleted file mode 100644 index de820e3..0000000 --- a/.stumpwm.d/utils.lisp +++ /dev/null @@ -1,27 +0,0 @@ -(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" - (user-homedir-pathname)))) - (when (probe-file quicklisp-init) - (load quicklisp-init))) - -(in-package :stumpwm) - -(asdf:load-system :cffi) - -(setf *default-package* :stumpwm) -(set-module-dir "~/.stumpwm.d/modules") - -(stumpwm:load-module "notifications") -(stumpwm:load-module "productivity") -(stumpwm:load-module "kbd-layouts") -(stumpwm:load-module "mpd") -(stumpwm:load-module "pinentry") -(stumpwm:load-module "pass") -(stumpwm:load-module "swm-emacs") -(stumpwm:load-module "end-session") -(stumpwm:load-module "globalwindows") -(stumpwm:load-module "urgentwindows") - -(mpd:mpd-connect) - -(setf kbd-layouts:*caps-lock-behavior* :swapped) -(kbd-layouts:keyboard-layout-list "us" "gr" "bg -variant phonetic") diff --git a/.xinitrc b/.xinitrc deleted file mode 100644 index 385cdc1..0000000 --- a/.xinitrc +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -source /etc/profile - -export PATH="/usr/bin:$PATH" -export XDG_SESSION_TYPE="x11" -export SBCL_HOME=/usr/lib64/sbcl - -/usr/bin/qtile start -#/usr/local/bin/stumpwm diff --git a/bash-base.sh b/bash-base.sh new file mode 100644 index 0000000..def52ec --- /dev/null +++ b/bash-base.sh @@ -0,0 +1,17 @@ +# source ~/.shells/alias.sh +# source ~/.shells/exports.sh +# source /etc/profile +source ~/.profile + + +GUIX_PROFILE="$HOME/.guix-profile" +. "$GUIX_PROFILE/etc/profile" + +## Prompt +if ${use_color} ; then + PS1='$(git branch --show-current 2>/dev/null)'; PS1='\n\[\e[38;5;102;2;3m\]\u\[\e[0m\]@\[\e[38;5;153;2;3m\]\h\n\[\e[0;38;5;226m\]\w \[\e[38;5;75;3m\]${PS1_CMD1}\n\[\e[0;38;5;198m\]λ \[\e[0m\]' +else + PS1+='\u@\h \w \$ ' +fi + +## complete -cf sudo diff --git a/guix/home.scm b/guix/home.scm new file mode 100644 index 0000000..08fd7ce --- /dev/null +++ b/guix/home.scm @@ -0,0 +1,84 @@ +;; This "home-environment" file can be passed to 'guix home reconfigure' +;; to reproduce the content of your profile. This is "symbolic": it only +;; specifies package names. To reproduce the exact same profile, you also +;; need to capture the channels being used, as returned by "guix describe". +;; See the "Replicating Guix" section in the manual. + +(use-modules (gnu packages) + (gnu packages gnupg) + (gnu services) + (guix gexp) + (gnu system) + (gnu home) + (gnu home services) + (gnu home services dotfiles) + (gnu home services shells) + (gnu home services desktop) + (gnu home services gnupg)) + +(home-environment + ;; Below is the list of packages that will show up in your + ;; Home profile, under ~/.guix-home/profile. + (packages (specifications->packages + (list "anki" "qtwebengine" "aspell-dict-el" "perl" "tree" + "font-iosevka-aile" "font-jetbrains-mono" "mu" "hyfetch" + "emacs-nov-el" "iptables" "emacs-yeetube" "syncthing" + "ungoogled-chromium" "emacs-pdf-tools" "python-lsp-server" + "transmission" "emacs-pgtk" "mpv" "yt-dlp" "icecat" "dino" + "0ad" "torbrowser" "emacs-elpy" "python-requests" + "python-mypy" "fuzzel" "alacritty" "wtype" "git" "emacs-geiser" + "emacs-geiser-guile" "sbcl" "curl" "libvterm" "emacs-vterm" + "inetutils" "emacs-jabber" "bind" "go" "nmap" "hunspell" + "hunspell-dict-en-us" "pinentry-emacs" "mlocate" "rsync" + "grimshot" "nyxt"))) + ;; Below is the list of Home services. To search for available + ;; services, run 'guix home search KEYWORD' in a terminal. + (services + (list (service home-bash-service-type + (home-bash-configuration + (guix-defaults? #f) + (aliases '(("ga" . "git add") + ("gaa" . "git add .") + ("gc" . "git commit -m") + ("gp" . "git push -u origin") + ("gpd" . "git push -u origin developer") + ("gpm" . "git push -u origin master") + ("grep" . "grep --color=auto") + ("gs" . "git status") + ("klight" . "brightnessctl --device='\\''tpacpi::kbd_backlight'\\'' set 1") + ("ll" . "ls -lah --color") + ("logout" . "pkill -U $USER") + ("ls" . "ls --color") + ("o" . "emacsclient -n") + ("weather" . "curl wttr.in") + ("ytd" . "yt-dlp") + ("gx" . "guix"))) + (bashrc (list (local-file "/home/thanos/dotfiles/bash-base.sh" #:recursive? #t))))) + (service home-dotfiles-service-type + (home-dotfiles-configuration + (directories '("/home/thanos/dotfiles/")) + (excluded '(".*~" ".*\\.swp" "\\.git" "\\.gitignore" + ".*emacs.el" "waybar-config" "vimium-options.json" + ".*bash" "README" "LICENSE" ".*\\.scm" "__pycache__" "bash-base.sh")) + (layout 'plain))) + ;; Env variables + (simple-service 'profile-service-type + home-environment-variables-service-type + '(("VISUAL" . "emacsclient") + ("EDITOR" . "emacsclient") + ("GTK_THEME" . "Adwaita-dark") + ("XDG_CURRENT_DESKTOP" . "sway") + ("XDG_SESSION_TYPE" . "wayland") + ("BROWSER" . "icecat") + ("XDG_SCREENSHOTS_DIR" . "/home/$USER/Pictures/screenshots/") + ("PATH" . "/home/$USER/.local/bin:$PATH"))) + ;; GPG Configuration + (service home-gpg-agent-service-type + (home-gpg-agent-configuration + (pinentry-program + (file-append pinentry-gtk2 "/bin/pinentry-gtk-2")) + (ssh-support? #t) + (default-cache-ttl 28800) + (max-cache-ttl 28800) + (default-cache-ttl-ssh 28800) + (max-cache-ttl-ssh 28800)))))) diff --git a/guix/services/tailscale.scm b/guix/services/tailscale.scm new file mode 100644 index 0000000..0632a41 --- /dev/null +++ b/guix/services/tailscale.scm @@ -0,0 +1,66 @@ +;; Under construction + +(define-module (services tailscale) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (gnu services configuration) + #:use-module (guix records) + #:use-module (guix gexp) + #:use-module (ice-9 match) + #:use-module (packages tailscale) + #:use-module (gnu packages linux) + #:export (tailscaled-service-type tailscaled-configuration)) + +;; TODO: https://tailscale.com/kb/1188/linux-dns/#dhcp-dhclient-overwriting-etcresolvconf + +(define-record-type* <tailscaled-configuration> + tailscaled-configuration make-tailscaled-configuration + tailscaled-configuration? + (tailscale tailscaled-configuration-tailscale + (default tailscale)) + (listen-port tailscaled-configuration-listen-port + (default "41641")) + (state-file tailscaled-configuration-state-file + (default "tailscaled.state"))) + +(define (tailscaled-activation config) + "Run tailscaled --cleanup" + #~(begin + (system* #$(file-append tailscale "/usr/bin/tailscaled") "--cleanup"))) + +(define (tailscaled-shepherd-service config) + "Return a <shepherd-service> for Tailscaled with CONFIG" + (let ((tailscale + (tailscaled-configuration-tailscale config)) + (listen-port + (tailscaled-configuration-listen-port config)) + (state-file + (tailscaled-configuration-state-file config)) + (environment #~(list (string-append + "PATH=" ; iptables is required for tailscale to work + (string-append #$iptables "/sbin") + ":" + (string-append #$iptables "/bin"))))) + (list + (shepherd-service + (provision '(tailscaled)) + (requirement '(networking)) ;; services this depends on + (start #~(make-forkexec-constructor + (list #$(file-append tailscale "/usr/bin/tailscaled") + "-state" #$state-file + ;"-port" #$listen-port + "-verbose" "10") + #:environment-variables #$environment + #:log-file "/var/log/tailscaled.log")) + (stop #~(make-kill-destructor)))))) + +(define tailscaled-service-type + (service-type + (name 'tailscaled) + (extensions + (list (service-extension shepherd-root-service-type + tailscaled-shepherd-service) + (service-extension activation-service-type + tailscaled-activation))) + (default-value (tailscaled-configuration)) + (description "Launch tailscaled."))) diff --git a/guix/system.scm b/guix/system.scm new file mode 100644 index 0000000..2a86298 --- /dev/null +++ b/guix/system.scm @@ -0,0 +1,157 @@ +;; TODO: Use this as a base module and seperate each system/machine +(use-modules (gnu) + (gnu services) + (gnu services dbus) + (gnu services desktop) + (gnu system) + (gnu system setuid) + (gnu system nss) + (nongnu packages linux) + (nongnu system linux-initrd)) + +(use-service-modules cups desktop networking ssh xorg docker guix admin pm docker) + +(use-package-modules nfs certs shells ssh linux bash emacs networking wm fonts libusb cups freedesktop file-systems version-control package-management) + + +(operating-system + (locale "en_US.utf8") + (timezone "Europe/Athens") + (keyboard-layout (keyboard-layout "us")) + (host-name "zeus") + + ;; TODO: Use the full linux kernel only on the desktop + (kernel linux) + (initrd microcode-initrd) + (firmware (list linux-firmware)) + + ;; The list of user accounts ('root' is implicit). + (users (cons* (user-account + (name "thanos") + (comment "Thanos Apollo") + (group "users") + (home-directory "/home/thanos") + (supplementary-groups '("wheel" "netdev" "audio" "video" "docker"))) + %base-user-accounts)) + + ;; Packages installed system-wide. + (packages + (append (map specification->package + '("sway" "swaylock" "swaylock-effects" "swaybg" + "waybar" "gnupg" "pinentry" "password-store" + "isync" "python" "font-jetbrains-mono" "docker" + "docker-cli" "icecat" "git" "avahi")) + %base-packages)) + + ;; Below is the list of system services. To search for available + ;; services, run 'guix system search KEYWORD' in a terminal. + (services + (append (list + (service docker-service-type) + ;; tty login + (service elogind-service-type) + + (service console-font-service-type + (map (lambda (tty) + ;; Use a larger font for HIDPI screens + (cons tty (file-append + font-terminus + "/share/consolefonts/ter-132n"))) + '("tty1" "tty2" "tty3"))) + + (service greetd-service-type + (greetd-configuration + (greeter-supplementary-groups + (list "video" "input")) + (terminals + (list + (greetd-terminal-configuration + (terminal-vt "1") + (terminal-switch #t)) + (greetd-terminal-configuration + (terminal-vt "2")) + (greetd-terminal-configuration + (terminal-vt "3")))))) + + + (service gnome-desktop-service-type) + + (service openssh-service-type + (openssh-configuration + (permit-root-login 'prohibit-password))) + + ;; (service static-networking-service-type + ;; (list %loopback-static-networking)) + + ;; TODO: Fix swaylock + (service screen-locker-service-type + (screen-locker-configuration + (name "swaylock") + (program (file-append swaylock "/bin/swaylock")) + (using-pam? #t) + (using-setuid? #f))) + + ;; Networking services + (service network-manager-service-type) + (service wpa-supplicant-service-type) ;; Needed by NetworkManager + (service modem-manager-service-type) ;; For cellular modems + + polkit-wheel-service + + (service tor-service-type) + (service cups-service-type) + ;; + ;; (service avahi-service-type) + (service udisks-service-type) + (service upower-service-type) + (service cups-pk-helper-service-type) + (service geoclue-service-type) + ;; (service polkit-service-type) + ;; (service dbus-root-service-type) + fontconfig-file-system-service ;; Manage the fontconfig cache + + ;; Power and thermal management services + (service thermald-service-type) + (service tlp-service-type + (tlp-configuration + (cpu-boost-on-ac? #t) + (wifi-pwr-on-bat? #t)))) + + (modify-services %base-services + (delete login-service-type) + (delete mingetty-service-type) + (delete console-font-service-type)))) + + + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader) + (targets (list "/boot/efi")) + (keyboard-layout keyboard-layout))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (swap-devices (list (swap-space + (target (uuid + "10551e45-7810-4171-a4b2-87372ae5bdb4"))))) + + ;; run 'lsblk -f' to get UUIDs. + (file-systems (cons* (file-system + (mount-point "/hdd") + (device (uuid "b0fddf60-47ff-469f-b135-8f6b58812c99" + 'xfs)) + (type "xfs")) + (file-system + (mount-point "/home") + (device (uuid "4efbc805-e89b-46b8-b895-b1ce807698c8" + 'ext4)) + (type "ext4")) + (file-system + (mount-point "/") + (device (uuid + "e350994d-4c98-4d04-9867-29c9fc779026" + 'ext4)) + (type "ext4")) + (file-system + (mount-point "/boot/efi") + (device (uuid "F2A9-FB50" + 'fat32)) + (type "vfat")) %base-file-systems))) |