A .gitignore => .gitignore +8 -0
@@ 0,0 1,8 @@
+.DS_Store
+.idea
+*.log
+tmp/
+
+auto-save-alist/
+.local/
+var/
A Makefile => Makefile +11 -0
@@ 0,0 1,11 @@
+##
+# Shaolin Emacs
+#
+# @file
+# @version 0.1
+
+build:
+ mkdir -p .local/guix-profiles/emacs
+ guix package -m guix.scm --profile=.local/guix-profiles/emacs/emacs-profile
+
+# end
M early-init.el => early-init.el +0 -12
@@ 23,14 23,6 @@
;; Emacs HEAD (27+) introduces early-init.el, which is run before init.el,
;; before package and UI initialization happens.
-;; Defer garbage collection further back in the startup process
-;; (setq gc-cons-threshold most-positive-fixnum)
-
-;; In Emacs 27+, package initialization occurs before `user-init-file' is
-;; loaded, but after `early-init-file'. Doom handles package initialization, so
-;; we must prevent Emacs from doing it early!
-(setq package-enable-at-startup nil)
-
;; Prevent the glimpse of un-styled Emacs by disabling these UI elements early.
(push '(menu-bar-lines . 0) default-frame-alist)
(push '(tool-bar-lines . 0) default-frame-alist)
@@ 41,8 33,4 @@
;; larger than the system default.
(setq frame-inhibit-implied-resize t)
-;; Ignore X resources; its settings would be redundant with the other settings
-;; in this file and can conflict with later config (particularly where the
-;; cursor color is concerned).
-
;;; early-init.el ends here
M etc/custom.el => etc/custom.el +4 -2
@@ 3,8 3,10 @@
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
- '(custom-safe-themes
- '("801a567c87755fe65d0484cb2bded31a4c5bb24fd1fe0ed11e6c02254017acb2" default)))
+ '(safe-local-variable-values
+ '((eval modify-syntax-entry 43 "'")
+ (eval modify-syntax-entry 36 "'")
+ (eval modify-syntax-entry 126 "'"))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
A etc/yasnippet/templates/file/emacs-lisp-mode/__package => etc/yasnippet/templates/file/emacs-lisp-mode/__package +25 -0
@@ 0,0 1,25 @@
+;;; `(file-name-nondirectory buffer-file-name)`${1: --- ${2:description}} -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) `(format-time-string "%Y")` `user-full-name`
+;;
+;; Author: `user-full-name` <https://git.sr.ht/~`user-login-name`>
+;; Maintainer: `user-full-name` <`user-mail-address`>
+;; Created: `(format-time-string "%B %d, %Y")`
+;; Modified: `(format-time-string "%B %d, %Y")`
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://git.sr.ht/~`user-login-name`/shaolin-emacs
+;; Package-Requires: ((emacs `emacs-version`) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;; $2
+;;
+;;; Code:
+
+`%`$0
+
+(provide '`(file-name-base buffer-file-name)`)
+;;; `(file-name-nondirectory buffer-file-name)` ends here
M guix.scm => guix.scm +52 -12
@@ 1,14 1,54 @@
-(use-modules (elais packages emacs-xyz)
- (guix profiles)
- (gnu packages emacs-xyz))
+(use-modules
+ (elais packages emacs-xyz)
+ (gnu packages emacs-xyz)
+ (gnu packages shellutils)
+ (guix build-system emacs)
+ (guix download)
+ (guix packages)
+ (guix profiles))
+
+(define emacs-envrc
+ (package
+ (name "emacs-envrc")
+ (version "0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/purcell/envrc/archive/"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "0r7ip3kzzg7prrgal54psplmy643xrzwcik5b5phrkwycqzm3pcd"))))
+ (build-system emacs-build-system)
+ (propagated-inputs `(("emacs-seq" ,emacs-seq)
+ ("direnv" ,direnv)))
+ (home-page "https://github.com/purcell/envrc")
+ (synopsis
+ "Support for `direnv' that operates buffer-locally")
+ (description
+ "Use direnv (https://direnv.net/) to set environment variables on a
+per-buffer basis. This means that when you work across multiple
+projects which have `.envrc` files, all processes launched from the
+buffers \"in\" those projects will be executed with the environment
+variables specified in those files. This allows different versions
+of linters and other tools to be installed in each project if
+desired.")
+ (license #f)))
(packages->manifest
- (list emacs-use-package emacs-tao-theme emacs-modus-operandi-theme
- emacs-spacemacs-theme emacs-edwina
- ;; ghost-eating-techniques
- emacs-yasnippet emacs-yasnippet-snippets emacs-no-littering
- ;; shaolin-movement
- emacs-boon emacs-which-key emacs-ctrlf emacs-selectrum
- emacs-general emacs-selectrum-prescient emacs-magit emacs-company
- emacs-company-prescient emacs-eglot emacs-direnv
- emacs-prescient))
+ (list emacs-use-package
+ ;; shao-ui
+ emacs-tao-theme emacs-golden-ratio emacs-diminish
+ ;; shao-projects
+ emacs-envrc emacs-projectile
+ ;; shao-snippets
+ emacs-yasnippet
+ ;; ghost-eating-techniques
+ emacs-yasnippet emacs-yasnippet-snippets emacs-no-littering
+ ;; shaolin-movement
+ emacs-boon emacs-which-key emacs-ctrlf emacs-selectrum
+ emacs-general emacs-magit emacs-company emacs-selectrum-prescient
+ emacs-company-prescient emacs-eglot emacs-direnv
+ emacs-prescient))
M init.el => init.el +17 -13
@@ 20,28 20,32 @@
;;; Code:
(eval-when-compile
- (add-to-list 'load-path (expand-file-name
- ".emacs-profile/share/emacs/site-lisp"
- user-emacs-directory))
+ (add-to-list 'load-path
+ (expand-file-name
+ ".local/guix-profiles/emacs/emacs-profile/share/emacs/site-lisp/"
+ user-emacs-directory))
(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))
(add-to-list 'custom-theme-load-path (expand-file-name
"themes"
user-emacs-directory))
(require 'use-package))
-(use-package tao-theme
- :init
- (setq tao-theme-use-sepia nil)
- :config
- (load-theme 'tao-yang t))
-
+
;; Credentials
-(setq user-name "Elais Player"
+(setq user-full-name "Elais Player"
user-mail-address "elais@fastmail.com")
-;; Local Packages
+;;
+;;; Local Packages
+
+;; General Configuration
(require 'shao-defaults)
-(require 'shao-lsp)
-(require 'init-snippets)
+(require 'shao-editor)
+(require 'shao-ui)
(require 'shao-fingers)
+(require 'shao-snippets)
+(require 'shao-completion)
+(require 'shao-projects)
+
+;; Special Modes
(require 'shao-vc)
D lisp/init-snippets.el => lisp/init-snippets.el +0 -30
@@ 1,30 0,0 @@
-;;; init-snippets.el --- Initialize yasnippet config. -*- lexical-binding: t -*-
-
-(use-package yasnippet
- :diminish yas-minor-mode
- :hook ((text-mode . yas-minor-mode)
- (prog-mode . yas-minor-mode)
- (conf-mode . yas-minor-mode)
- (snippet-mode . yas-minor-mode))
- :commands (yas-minor-mode-on
- yas-expand
- yas-expand-snippet
- yas-lookup-snippet
- yas-insert-snippet
- yas-new-snippet
- yas-visit-snippet-file)
- :config
- (add-to-list 'yas-snippet-dirs "~/.emacs.d/snippets")
- (add-to-list 'yas-snippet-dirs "~/.guix-extra-profiles/shaolin-emacs/shaolin-emacs/yasnippet-snippets")
- (setq yas-verbosity 0
- yas-also-auto-indent-first-line t))
-
-(use-package autoinsert
- :config
- (setq auto-insert-query nil)
- (auto-insert-mode 1)
- (add-hook 'find-file-hook 'auto-insert)
- (setq auto-insert-alist nil))
-
-(provide 'init-snippets)
-;;; init-snippets.el ends here
A lisp/shao-completion.el => lisp/shao-completion.el +78 -0
@@ 0,0 1,78 @@
+;;; shao-completion.el --- completions for shaolin -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2020 Elais Player
+;;
+;; Author: Elais Player <http://github/elais>
+;; Maintainer: Elais Player <elais@fastmail.com>
+;; Created: June 13, 2020
+;; Modified: June 13, 2020
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://github.com/elais/shao-completion
+;; Package-Requires: ((emacs 28.0.50) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;; Shaolin completion packages
+;;
+;;; Code:
+
+
+;;
+;;; Functions
+
+(defun recentf-open-files+ ()
+ "Use `completing-read' to open a recent file."
+ (interactive)
+ (let ((files (mapcar 'abbreviate-file-name recentf-list)))
+ (find-file (completing-read "Find recent file: " files nil t))))
+
+;;
+;;; Packages
+(use-package company
+ :diminish company-mode
+ :commands (company-complete-common
+ company-manual-begin
+ company-grab-line)
+ :custom
+ (company-idle-delay 1)
+ (company-minimum-prefix-length 2)
+ (company-tooltip-limit 14)
+ (company-tooltip-align-annotations t)
+ (company-require-match 'never)
+ (company-global-modes
+ '(not erc-mode message-mode help-mode gud-mode eshell-mode))
+ (company-frontends '(company-pseudo-tooltip-frontend
+ company-echo-metadata-frontend))
+
+ (company-backends '(company-capf))
+
+ (company-auto-complete-chars nil)
+ (company-dabbrev-other-buffers nil)
+ (compan-dabbrev-ignore-case nil)
+ (company-dabbrev-downcase nil)
+ :config
+ (global-company-mode +1))
+
+(use-package company-tng
+ :config
+ (add-to-list 'company-frontends 'company-tng-frontend))
+
+(use-package company-prescient
+ :hook (company-mode . company-prescient-mode)
+ :config
+ (company-prescient-mode +1))
+
+(use-package selectrum
+ :config
+ (selectrum-mode +1))
+
+(use-package selectrum-prescient
+ :config
+ (selectrum-prescient-mode +1)
+ (prescient-persist-mode +1))
+
+(provide 'shao-completion)
+;;; shao-completion.el ends here
M lisp/shao-defaults.el => lisp/shao-defaults.el +0 -9
@@ 1,14 1,5 @@
;;; shao-defaults.el --- defaults -*- lexical-binding: t; -*-
-(prefer-coding-system 'utf-8)
-(set-default-coding-systems 'utf-8)
-(set-terminal-coding-system 'utf-8)
-(set-keyboard-coding-system 'utf-8)
-
-;; smart tab behavior
-(setq-default indent-tabs-mode nil)
-(setq-default tab-width 8)
-(setq tab-always-indent 'complete)
;; Startup optimizations
(setq inhibit-startup-message t
A lisp/shao-editor.el => lisp/shao-editor.el +79 -0
@@ 0,0 1,79 @@
+;;; shao-editor.el --- editor configuration -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2020 Elais Player
+;;
+;; Author: Elais Player <https://git.sr.ht/~elais>
+;; Maintainer: Elais Player <elais@fastmail.com>
+;; Created: June 13, 2020
+;; Modified: June 13, 2020
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://github.com/elais/shao-editor
+;; Package-Requires: ((emacs 28.0.50) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;;
+;;
+;;; Code:
+
+;; Resolve symlinks when opening files so any operations are conducted
+;; from the file's true directory (like `find-file').
+(setq find-file-visit-truename t
+ vc-follow-symlinks t)
+
+;;; Formatting
+;; Favor spaces over tabs. Pls dun h8, but I think spaces (and 4 of them) is a
+;; more consistent default than 8-space tabs. It can be changed on a per-mode
+;; basis anyway (and is, where tabs are the canonical style, like go-mode).
+(prefer-coding-system 'utf-8)
+(set-default-coding-systems 'utf-8)
+(set-terminal-coding-system 'utf-8)
+(set-keyboard-coding-system 'utf-8)
+
+;; smart tab behavior
+(setq-default indent-tabs-mode nil)
+(setq-default tab-width 2)
+(setq tab-always-indent 'complete)
+
+;; An archaic default in the age of widescreen 4k displays? I disagree. We still
+;; frequently split our terminals and editor frames, or have them side-by-side,
+;; using up more of that newly available horizontal real-estate.
+(setq-default fill-column 80)
+
+;; Continue wrapped words at whitespace, rather than in the middle of a word.
+(setq-default word-wrap t)
+
+;; ...but don't do any wrapping by default. It's expensive. Enable
+;; `visual-line-mode' if you want soft line-wrapping. `auto-fill-mode' for hard
+;; line-wrapping.
+(setq-default truncate-lines t)
+
+;; If enabled (and `truncate-lines' was disabled), soft wrapping no longer
+;; occurs when that window is less than `truncate-partial-width-windows'
+;; characters wide. We don't need this, and it's extra work for Emacs otherwise,
+;; so off it goes.
+(setq truncate-partial-width-windows nil)
+
+;; Disable the warning "X and Y are the same file".
+(setq find-file-suppress-same-file-warnings t)
+
+
+;; The POSIX standard defines a line is "a sequence of zero or more non-newline
+;; characters followed by a terminating newline", so files should end in a
+;; newline. Windows doesn't respect this (because it's Windows), but we should,
+;; since programmers' tools tend to be POSIX compliant.
+(setq require-final-newline t)
+
+;;
+;;; Extra file extensions to support
+
+(push '("/LICENSE\\'" . text-mode) auto-mode-alist)
+(push '("\\.log\\'" . text-mode) auto-mode-alist)
+(push '("rc\\'" . conf-mode) auto-mode-alist)
+(push '("\\.\\(?:hex\\|nes\\)\\'" . hexl-mode) auto-mode-alist)
+
+(provide 'shao-editor)
+;;; shao-editor.el ends here
M lisp/shao-fingers.el => lisp/shao-fingers.el +61 -51
@@ 1,63 1,73 @@
-;;; shao-fingers.el -*- lexical-binding: t; -*-
+;;; shao-fingers.el --- core keybindings -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2020 Elais Player
+;;
+;; Author: Elais Player <http://github/elais>
+;; Maintainer: Elais Player <elais@fastmail.com>
+;; Created: June 13, 2020
+;; Modified: June 13, 2020
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://github.com/elais/shao-projects
+;; Package-Requires: ((emacs 28.0.50) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;; Keybinding interface for shaolin
+;;
+;;; Code:
-(use-package general
- :demand t)
+;;; useful keymaps
+;; main shaolin keymaps
+(defvar +shaolin-fingers-map (make-sparse-keymap))
+
+;; file keymap
+(defvar +shaolin-files-map (make-sparse-keymap))
+
+;; buffer keymap
+(defvar +shaolin-buffer-map (make-sparse-keymap))
+
+;;
+;;; Packages
-(use-package boon
+(use-package general
:demand t
- :general
- (:keymaps 'boon-command-mode
- "r" 'ctrlf-forward-regexp)
- :init
- (require 'boon-qwerty)
- :config
- (boon-mode))
-
-(use-package company
- :commands company-complete-common company-manual-begin company-grab-line
- :init
- (setq company-idle-delay 0.25
- company-minimum-prefix-length 2
- company-tooltip-limit 14
- company-tooltip-align-annotations t
- company-require-match 'never
- company-global-modes
- '(not erc-mode message-mode help-mode gud-mode eshell-mode)
- company-frontends '(company-pseudo-tooltip-frontend
- company-echo-metadata-frontend)
-
- company-backends '(company-capf)
-
- company-auto-complete-chars nil
- company-dabbrev-other-buffers nil
- compan-dabbrev-ignore-case nil
- company-dabbrev-downcase nil)
- :config
- (global-company-mode +1))
-
-(use-package company-tng
- :config
- (add-to-list 'company-frontends 'company-tng-frontend))
-(use-package company-prescient
- :hook (company-mode . company-prescient-mode)
:config
- (company-prescient-mode +1))
-
-(use-package selectrum
- :config
- (selectrum-mode +1))
+ (general-define-key
+ :keymaps #'+shaolin-files-map
+ "s" 'save-buffer
+ "f" 'find-file)
+
+ (general-create-definer shaolin-fingers-def
+ :keymaps '+shaolin-fingers-map
+ "f" #'+shaolin-files-map
+ "b" #'+shaolin-buffer-map))
-(use-package selectrum-prescient
+(use-package which-key
+ :diminish which-key-mode
+ :custom
+ (which-key-sort-order #'which-key-prefix-then-key-order)
+ (which-key-sort-uppercase-first nil)
+ (which-key-add-column-padding 1)
+ (which-key-max-display-columns nil)
+ (which-key-min-display-lines 6)
:config
- (selectrum-prescient-mode +1)
- (prescient-persist-mode +1))
+ (which-key-mode +1))
(use-package ctrlf
+ :general
+ (:keymaps 'boon-command-map
+ "r" 'ctrlf-forward-regexp
+ "h" 'ctrlf-forward-literal)
:config
(ctrlf-mode +1))
-
-(use-package which-key
+
+(use-package boon-qwerty
+ :demand t
:config
- (which-key-mode))
-
+ (boon-mode +1))
+
(provide 'shao-fingers)
+;;; shao-fingers.el ends here
A lisp/shao-projects.el => lisp/shao-projects.el +48 -0
@@ 0,0 1,48 @@
+;;; shao-projects.el -- Shaolin Project Config -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2020 Elais Player
+;;
+;; Author: Elais Player <http://github/elais>
+;; Maintainer: Elais Player <elais@fastmail.com>
+;; Created: June 13, 2020
+;; Modified: June 13, 2020
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://github.com/elais/shao-projects
+;; Package-Requires: ((emacs 28.0.50) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;; Project specific packages and configuration
+;;
+;;; Code:
+
+;;
+;;; Packages
+
+(use-package envrc
+ :general
+ ("C-c e" 'envrc-command-map)
+ :config
+ (envrc-global-mode))
+
+(use-package projectile
+ :commands (projectile-project-root
+ projectile-project-name
+ projectile-project-p
+ projectile-locate-dominating-file)
+ :custom
+ (projectile-ignored-projects '("~/" "/tmp"))
+ (projectile-globally-ignored-files '(".DS_Store" "Icon
" "TAGS"))
+ (projectile--globally-ignored-file-suffixes '(".elc" ".pyc" ".o"))
+ (projectile-root-files-bottom-up
+ (append '(".projectile"
+ ".project"
+ ".git")))
+ :config
+ (projectile-mode +1))
+
+(provide 'shao-projects)
+;;; shao-projects.el ends here
A lisp/shao-snippets.el => lisp/shao-snippets.el +76 -0
@@ 0,0 1,76 @@
+;;; shao-snippets.el --- Snippets Configuration -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2020 Elais Player
+;;
+;; Author: Elais Player <http://github/elais>
+;; Maintainer: Elais Player <elais@fastmail.com>
+;; Created: June 13, 2020
+;; Modified: June 13, 2020
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://github.com/elais/shao-snippets
+;; Package-Requires: ((emacs 28.0.50) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;;
+;;
+;;; Code:
+
+;;; Variables
+
+(defvar +guix-snippets-dir
+ (expand-file-name
+ ".local/guix-profiles/emacs/emacs-profile/share/emacs/yasnippet-snippets/"
+ user-emacs-directory)
+ "Directory where `yasnippet-dirs' something.")
+
+(defvar +file-templates-dir
+ (expand-file-name
+ "etc/yasnippet/templates/file/"
+ user-emacs-directory)
+ "The path to the directory of yasnippet folders to use for file templates.")
+
+(defvar +file-templates-default-trigger "__"
+ "The default yasnippet trigger key (a string) for file template rules that
+don't have a :trigger property in `+file-templates-alist'.")
+
+(defvar +file-templates-alist
+ '((gitignore-mode)
+ (dockerfile-mode)
+ ;; emacs lisp
+ ("/.dir-locals.el$")
+ (emacs-lisp-mode :trigger "__package"))
+ "An alist of file template rules. The CAR of each rule is either a major mode
+symbol or regexp string. The CDR is a plist. See `set-file-template!' for more
+information.")
+
+;;
+;;; Library
+
+;; TODO buffer specific hooks
+
+;;
+;;; Packages
+
+(use-package yasnippet
+ :commands (yas-minor-mode-on
+ yas-expand
+ yas-expand-snippet
+ yas-lookup-snippet
+ yas-insert-snippet
+ yas-new-snippet
+ yas-visit-snippet-file)
+ :diminish yas-minor-mode
+ :hook ((prog-mode . yas-minor-mode)
+ (text-mode . yas-minor-mode)
+ (conf-mode . yas-minor-mode))
+ :config
+ (add-to-list 'yas-snippet-dirs '+guix-snippets-dir)
+ (add-to-list 'yas-snippet-dirs '+file-templates-dir)
+ (yas-reload-all))
+
+(provide 'shao-snippets)
+;;; shao-snippets.el ends here
A lisp/shao-ui.el => lisp/shao-ui.el +94 -0
@@ 0,0 1,94 @@
+;;; shao-ui.el -- Shaolin Emacs UI -*- lexical-binding: t; -*-
+;;
+;; Copyright (C) 2020 Elais Player
+;;
+;; Author: Elais Player <http://github/elais>
+;; Maintainer: Elais Player <elais@fastmail.com>
+;; Created: June 13, 2020
+;; Modified: June 13, 2020
+;; Version: 0.0.1
+;; Keywords:
+;; Homepage: https://github.com/elais/shao-ui
+;; Package-Requires: ((emacs 28.0.50) (cl-lib "0.5"))
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;
+;; This borrows liberally from doom-emacs, because the defaults I used there
+;; are defaults that I actually liked a lot.
+;;
+;;; Code:
+
+
+;;; General UX
+(setq confirm-nonexistent-file-or-buffer nil)
+
+;;
+;;; Scrolling
+
+(setq hscroll-margin 2
+ hscroll-step 1
+ ;; Emacs spends too much effort recentering the screen if you scroll the
+ ;; cursor more than N lines past window edges (where N is the settings of
+ ;; `scroll-conservatively'). This is especially slow in larger files
+ ;; during large-scale scrolling commands. If kept over 100, the window is
+ ;; never automatically recentered.
+ scroll-conservatively 101
+ scroll-margin 0
+ scroll-preserve-screen-position t
+ ;; Reduce cursor lag by a tiny bit by not auto-adjusting `window-vscroll'
+ ;; for tall lines.
+ auto-window-vscroll nil
+ ;; mouse
+ mouse-wheel-scroll-amount '(5 ((shift) . 2))
+ mouse-wheel-progressive-speed nil) ; don't accelerate scrolling
+
+;;
+;;; Windows/frames
+
+;; A simple frame title
+(setq frame-title-format '("%b – Shaolin")
+ icon-title-format frame-title-format)
+
+;; Don't resize windows & frames in steps; it's prohibitive to prevent the user
+;; from resizing it to exact dimensions, and looks weird.
+(setq window-resize-pixelwise t
+ frame-resize-pixelwise t)
+
+(unless (assq 'menu-bar-lines default-frame-alist)
+ ;; We do this in early-init.el too, but in case the user is on Emacs 26 we do
+ ;; it here too: disable tool and scrollbars, as Doom encourages
+ ;; keyboard-centric workflows, so these are just clutter (the scrollbar also
+ ;; impacts performance).
+ (add-to-list 'default-frame-alist '(menu-bar-lines . 0))
+ (add-to-list 'default-frame-alist '(tool-bar-lines . 0))
+ (add-to-list 'default-frame-alist '(vertical-scroll-bars)))
+
+;; These are disabled directly through their frame parameters, to avoid the
+;; extra work their minor modes do, but we have to unset these variables
+;; ourselves, otherwise users will have to cycle them twice to re-enable them.
+(setq menu-bar-mode nil
+ tool-bar-mode nil
+ scroll-bar-mode nil)
+
+;;; Packages
+
+(use-package diminish)
+
+(use-package tao-theme
+ :custom
+ (tao-theme-use-sepia nil)
+ :config
+ (load-theme 'tao-yin t))
+
+(use-package golden-ratio
+ :diminish golden-ratio-mode
+ :custom
+ (golden-ratio-auto-scale t)
+ :config
+ (golden-ratio-mode +1))
+
+
+(provide 'shao-ui)
+;;; shao-ui.el ends here