diff --git a/.config/.emacs.d/init.el b/.config/.emacs.d/init.el index d3e4ffb..fe67160 100644 --- a/.config/.emacs.d/init.el +++ b/.config/.emacs.d/init.el @@ -70,6 +70,9 @@ (use-package rust-mode) +(use-package nix-mode + :mode "\\.nix\\'") + ;; Can't have lisps without paredit! (use-package paredit :ensure t diff --git a/.config/guix/channels.scm b/.config/guix/channels.scm deleted file mode 100644 index 98e8a70..0000000 --- a/.config/guix/channels.scm +++ /dev/null @@ -1,15 +0,0 @@ -;; This file is generated from ~/dotfiles/guix/system-config/base.org. -(list (channel - (name 'nonguix) - (url "https://gitlab.com/nonguix/nonguix")) - (channel - (name 'gguix) - (url "https://github.com/gmemstr/gguix")) - (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (introduction - (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" - (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/.config/guix/systems/base-system.scm b/.config/guix/systems/base-system.scm deleted file mode 100644 index 7d9f924..0000000 --- a/.config/guix/systems/base-system.scm +++ /dev/null @@ -1,118 +0,0 @@ -;; This file is geneated from ~/dotfiles/guix/system-config/base.org -(define-module (base-system) - #:use-module (gnu) - #:use-module (srfi srfi-1) - #:use-module (gnu system nss) - #:use-module (gnu services pm) - #:use-module (gnu services cups) - #:use-module (gnu services desktop) - #:use-module (gnu services docker) - #:use-module (gnu services networking) - #:use-module (gnu services virtualization) - #:use-module (gnu packages wm) - #:use-module (gnu packages cups) - #:use-module (gnu packages vim) - #:use-module (gnu packages gtk) - #:use-module (gnu packages xorg) - #:use-module (gnu packages emacs) - #:use-module (gnu packages file-systems) - #:use-module (gnu packages gnome) - #:use-module (gnu packages mtools) - #:use-module (gnu packages linux) - #:use-module (gnu packages audio) - #:use-module (gnu packages gnuzilla) - #:use-module (gnu packages pulseaudio) - #:use-module (gnu packages web-browsers) - #:use-module (gnu packages version-control) - #:use-module (gnu packages package-management) - #:use-module (nongnu packages linux) - #:use-module (nongnu system linux-initrd)) - -(use-service-modules nix) -(use-service-modules desktop xorg) -(use-package-modules certs) -(use-package-modules shells) - -(define %xorg-libinput-config - "Section \"InputClass\" - Identifier \"Touchpads\" - Driver \"libinput\" - MatchDevicePath \"/dev/input/event*\" - MatchIsTouchpad \"on\" - - Option \"Tapping\" \"on\" - Option \"TappingDrag\" \"on\" - Option \"DisableWhileTyping\" \"on\" - Option \"MiddleEmulation\" \"on\" - Option \"ScrollMethod\" \"twofinger\" -EndSection -Section \"InputClass\" - Identifier \"Keyboards\" - Driver \"libinput\" - MatchDevicePath \"/dev/input/event*\" - MatchIsKeyboard \"on\" -EndSection -") - -(define-public base-operating-system - (operating-system - (host-name "london") - (timezone "Europe/London") - (locale "en_US.utf8") - - ;; Nonfree stuff - (kernel linux) - (firmware (list linux-firmware)) - (initrd microcode-initrd) - - (keyboard-layout (keyboard-layout "us" "intl")) - - (bootloader (bootloader-configuration - (bootloader grub-efi-bootloader) - (target "/boot/efi") - (keyboard-layout keyboard-layout))) - - (file-systems (cons* - (file-system - (device "/dev/sda1") - (mount-point "/boot") - (type "vfat")) - (file-system - (device "/dev/sda2") - (mount-point "/") - (type "ext4")) %base-file-systems)) - - (users (cons (user-account - (name "gsimmer") - (comment "Gabriel Simmer") - (password (crypt "pass" "$6$abc")) - (group "users") - (supplementary-groups '("wheel" "netdev" - "audio" "video" - "docker" "kvm" - "tty" "input" - "realtime" "audio" - "video"))) - %base-user-accounts)) - (groups (cons (user-group (system? #t) (name "realtime")) - %base-groups)) - - (packages (append (list - git - exfat-utils - fuse-exfat - stow - vim - emacs - xterm - pulseaudio - xf86-input-libinput - nss-certs - gvfs) %base-packages)) - (services (append (list (service gnome-desktop-service-type) - (set-xorg-configuration - (xorg-configuration - (keyboard-layout keyboard-layout))) - (service docker-service-type)) - %desktop-services)) - (name-service-switch %mdns-host-lookup-nss))) diff --git a/.config/guix/systems/london.scm b/.config/guix/systems/london.scm deleted file mode 100644 index ca41f1d..0000000 --- a/.config/guix/systems/london.scm +++ /dev/null @@ -1,18 +0,0 @@ -(define-module (london) - #:use-module (base-system) - #:use-module (gnu)) - -(operating-system - (inherit base-operating-system) - (host-name "london") - - (file-systems (cons* - (file-system - (device "/dev/nvme0n1p1") - (mount-point "/boot/efi") - (type "vfat")) - (file-system - (device "/dev/nvme0n1p2") - (mount-point "/") - (type "ext4")) - %base-file-systems))) diff --git a/.config/guix/systems/virtual.scm b/.config/guix/systems/virtual.scm deleted file mode 100644 index 646f5ab..0000000 --- a/.config/guix/systems/virtual.scm +++ /dev/null @@ -1,11 +0,0 @@ -(define-module (virtual) - #:use-module (base-system) - #:use-module (gnu)) - -(operating-system - (inherit base-operating-system) - (host-name "virtual") - (bootloader (bootloader-configuration - (bootloader grub-bootloader) - (target "/dev/sda") - (keyboard-layout (keyboard-layout "us"))))) diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 5b19c06..0e0d292 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -121,7 +121,7 @@ ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages - '(treemacs-projectile projectile paredit all-the-fonts doom-modeline rust-mode swipe spinner lsp-treemacs lsp-ivy lsp-ui lsp-mode counsel swiper ivy treemacs use-package monokai-pro-theme))) + '(nix-mode treemacs-projectile projectile paredit all-the-fonts doom-modeline rust-mode swipe spinner lsp-treemacs lsp-ivy lsp-ui lsp-mode counsel swiper ivy treemacs use-package monokai-pro-theme))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/Dots.org b/Dots.org new file mode 100644 index 0000000..63388c5 --- /dev/null +++ b/Dots.org @@ -0,0 +1,421 @@ +* Dotfiles + +#+PROPERTY: header-args :mkdirp yes + +/now do it with orgmode!/ + +original old configs are in =archive/=. + +** Table of Contents + +:properties: +:toc: :include all :ignore this +:end: +:contents: +- [[#my-setup][My Setup]] + - [[#zsh][zsh]] + - [[#wezterm][WezTerm]] + - [[#systemd-units][Systemd Units]] + - [[#sublime-text][Sublime Text]] + - [[#emacs][emacs]] +:end: + +** My Setup + + ...is a little in flux. + + Over the past several months, I've been investing time into [[https://blog.gabrielsimmer.com/posts/emacs-induction/][learning emacs]], replacing + Sublime in my workflow. As a part of this I've also considered using Guix (see: =seedfile.org=), + but am not quite there in my journey, so they aren't included here. + +*** zsh + + zsh is my choice of shell, with some written-in-Rust replacements for + a few CLI tools. + + =.zshrc= + +#+begin_src shell :tangle .zshrc +export ZSH="/home/gsimmer/.oh-my-zsh" + +ZSH_THEME="frisk" + +plugins=(git fzf zsh-autosuggestions) + +source $ZSH/oh-my-zsh.sh + +export GOPATH="/home/gsimmer/Projects/go" +export CARGOPATH="/home/gsimmer/.cargo/bin" +export PATH="/home/gsimmer/.local/bin:$GOPATH/bin:$CARGOPATH:$PATH" + +# Starship init. +#eval "$(starship init zsh)" + +# aliases for various Rust-based utils. +if [ $(which exa) != 'exa not found' ]; then + alias ls=exa +fi +if [ $(which bat) != 'bat not found' ]; then + alias cat=bat +fi +if [ $(which rg) != 'rg not found' ]; then + alias grep=rg +fi +#+end_src + +*** wezterm + + WezTerm is my terminal of choice these days, and is configured with Lua. + Most of the tweaks from the default config are around using Monokai Pro + colours. + + =.config/wezterm/wezterm.lua= + +#+begin_src lua :tangle .config/wezterm/wezterm.lua +local wezterm = require 'wezterm'; + +return { + automatically_reload_config = true, + font = wezterm.font("IBM Plex Mono"), + window_close_confirmation = "NeverPrompt", + font_size = 12, + initial_cols = 120, + initial_rows = 35, + colors = { + foreground = "#f7f1ff", + background = "#222222", + cursor_bg = "#8b888f", + cursor_fg = "#f7f1ff", + cursor_border = "#8b888f", + selection_fg = "#363537", + selection_bg = "#69676c", + scrollbar_thumb = "#222222", + split = "#fce566", + tab_bar = { + background = "#222222", + active_tab = { + bg_color = "#f7f1ff", + fg_color = "#69676c", + intensity = "Normal", + underline = "None", + italic = false, + strikethrough = false, + }, + + inactive_tab = { + bg_color = "#69676c", + fg_color = "#f7f1ff", + + }, + + inactive_tab_hover = { + bg_color = "#69676c", + fg_color = "#f7f1ff", + italic = true, + } + } + } +} +#+end_src + +*** systemd units + + When I move to Guix I expect I'll need to port these to Herd, but in the meantime... + +**** clock + + This runs a small webserver that renders a date that is fetched and displayed + on a Raspberry Pi with a small eink display. + + You can read more about it [[https://dev.to/gmemstr/tiny-eink-dashboard-29a4][here]]. + + =.config/systemd/user/clock.service= + +#+begin_src :tangle .config/systemd/user/clock.service +[Unit] +Description=eink Clock Server Daemon + +[Service] +WorkingDirectory=/mnt/wd/Projects/eink-dashboard +ExecStart=python server/main.py + +[Install] +WantedBy=default.target +#+end_src + +**** backup + + This runs the rclone command to back up my large data SSD to my NAS. Coupled with + a timer. + + =.config/systemd/user/backup.service= +#+begin_src :tangle .config/systemd/user/backup.service +[Unit] +Description=Backup Service for Projects +Wants=gsimmer.timer + +[Service] +Type=oneshot +WorkingDirectory=/mnt/fhg +ExecStart=bash rclone-pi.sh + +[Install] +WantedBy=default.target +#+end_src + + =.config/systemd/user/gsimmer.timer= + +#+begin_src :tangle .config/systemd/user/gsimmer.timer +[Unit] +Description=Runs backup script for project directories to Raspberry Pi. +Requires=backup.service + +[Timer] +Unit=backup.service +OnBootSec=15min +OnUnitActive=1w + +[Install] +WantedBy=timers.target +#+end_src + +*** emacs + + Ah, the star of the show! I'm still working on this configuration, + and plan to split it into seperate files for each package. In the + meantime, enjoy the monolith. + + =..emacs.d/init.el= + +#+begin_src elisp :tangle .emacs.d/init.el +;; Mostly following along with System Crafter's videos. +;; So this will look pretty familiar. +(setq inhibit-startup-message t) + +(scroll-bar-mode -1) +(tool-bar-mode -1) +(tooltip-mode -1) +(set-fringe-mode 10) + +(menu-bar-mode -1) + +;; disable auto-save and auto-backup +(setq auto-save-default nil) +(setq make-backup-files nil) + +(set-face-attribute 'default nil :font "IBM Plex Mono" :height 120) +(global-set-key (kbd "") 'keyboard-escape-quit) +(setq org-edit-src-content-indentation 0 + org-src-tab-acts-natively t + org-src-preserve-indentation t) + +;; Packages stuff. +(require 'package) + +(setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("org" . "https://orgmode.org/elpa/") + ("elpa" . "https://elpa.gnu.org/packages/"))) + +(package-initialize) +(unless package-archive-contents + (package-refresh-contents)) + +(unless (package-installed-p 'use-package) + (package-install 'use-package)) + +(require 'use-package) +(setq use-package-always-ensure t) + +;; I like Monokai Pro, sue me ;) +(use-package monokai-pro-theme + :ensure t + :config + (load-theme 'monokai-pro-spectrum t)) + +(use-package doom-modeline + :ensure t + :init (doom-modeline-mode 1) + :custom + (doom-mode-line-height 15)) +(use-package all-the-icons :ensure t) + +(use-package treemacs + :ensure t + :defer t + :init + :bind (:map global-map + ("M-0" . treemacs-select-window) + ("C-x t t" . treemacs))) +(use-package treemacs-projectile + :ensure t) +;; LSP config. +(use-package spinner :ensure t) +(use-package lsp-mode + :ensure t + :init + (setq lsp-keymap-prefix "C-c l") + :hook ((rust-mode . lsp) + (lsp-mode . lsp-enable-which-key-integration)) + :commands lsp) + +(use-package lsp-ui :commands lsp-ui-mode) +(use-package lsp-ivy :commands lsp-ivy-workspace-symbol) +(use-package lsp-treemacs :commands lsp-treemacs-errors-list) + +(use-package rust-mode) + +;; Can't have lisps without paredit! +(use-package paredit + :ensure t + :config + (add-hook 'emacs-lisp-mode-hook #'paredit-mode) + ;; enable in the *scratch* buffer + (add-hook 'lisp-interaction-mode-hook #'paredit-mode) + (add-hook 'ielm-mode-hook #'paredit-mode) + (add-hook 'lisp-mode-hook #'paredit-mode) + (add-hook 'eval-expression-minibuffer-setup-hook #'paredit-mode)) + +(use-package projectile + :ensure t + :init + (projectile-mode +1) + :bind (:map projectile-mode-map + ("s-p" . projectile-command-map) + ("C-c p" . projectile-command-map)) + :config + (setq projectile-project-search-path '("~/Projects"))) + +;; Ivy/Swiper/Counsel config. +(use-package swiper) +(use-package counsel) +(use-package ivy + :diminish + :bind (("C-s" . swiper) + :map ivy-minibuffer-map + ("TAB" . ivy-alt-done) + ("C-l" . ivy-alt-done) + ("C-j" . ivy-next-line) + ("C-k" . ivy-previous-line) + :map ivy-switch-buffer-map + ("C-k" . ivy-previous-line) + ("C-l" . ivy-done) + ("C-d" . ivy-switch-buffer-kill) + :map ivy-reverse-i-search-map + ("C-k" . ivy-previous-line) + ("C-d" . ivy-reverse-i-search-kill)) + :config + (ivy-mode 1)) +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; 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. + '(package-selected-packages + '(treemacs-projectile projectile paredit all-the-fonts doom-modeline rust-mode swipe spinner lsp-treemacs lsp-ivy lsp-ui lsp-mode counsel swiper ivy treemacs use-package monokai-pro-theme))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; 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. + ) +#+end_src + +*** sublime text + + Although I've moved to emacs for what I would use Sublime for, I still + keep this configuration around for quick setup in the case I need it + (e.g a virtual machine). + + Most of these settings are for Monokai Pro. + + =.config/sublime-text-3/Packages/User/Preferences.sublime-settings= + +#+begin_src json :tangle .config/sublime-text-3/Packages/User/Preferences.sublime-setting +{ + "auto_complete_delay": 20, + "color_scheme": "Monokai Pro (Filter Spectrum).sublime-color-scheme", + "font_face": "Iosevka Regular", + "font_size": 13, + "ignored_packages": + [ + "Rust", + "Vintage" + ], + "monokai_pro_file_icons": true, + "monokai_pro_highlight_open_folders": true, + "monokai_pro_minimal": true, + "monokai_pro_sidebar_headings": true, + "monokai_pro_style_title_bar": true, + "monokai_pro_ui_font_face": "IBM Plex Mono", + "rulers": + [ + 80 + ], + "theme": "Monokai Pro (Filter Spectrum).sublime-theme", + "mini_diff": "auto", + "hardware_acceleration": "opengl", + "themed_title_bar": true, +} +#+end_src + + I also keep a Package Control file to auto install stuff. + + =.config/sublime-text-3/Packages/User/Package Control.sublime-settings= + +#+begin_src json :tangle .config/sublime-text-3/Packages/User/Package Control.sublime-settings +{ + "bootstrapped": true, + "debug": true, + "in_process_packages": + [ + ], + "installed_packages": + [ + "Dockerfile Syntax Highlighting", + "Emmet", + "GitGutter", + "Gofmt", + "Golang Build", + "HexViewer", + "LSP", + "LSP-bash", + "LSP-intelephense", + "LSP-pyright", + "LSP-SourceKit", + "LSP-typescript", + "LSP-yaml", + "Package Control", + "paredit", + "Rust Enhanced", + "SideBarEnhancements", + "SublimeLinter", + "Swift", + "Theme - Monokai Pro", + "TOML", + "TypeScript", + ], +} +#+end_src + + And a Markdown specific configuration to bring the distraction-free + mode to the default windowed view. + + =.config/sublime-text-3/Packages/User/Markdown.sublime-settings= + +#+begin_src json :tangle .config/sublime-text-3/Packages/User/Markdown.sublime-settings +{ + "auto_complete": false, + "ignored_packages": ["Vintage", "Emmet", "SublimeCodeIntel"], + "draw_centered": true, + "spell_check": true, + "tab_completion": false, + "auto_complete_triggers": [], + "word_wrap": true, + "line_numbers": false, + "gutter": false, + "wrap_width": 80, + "word_wrap": true, + "scroll_past_end": true +} +#+end_src + diff --git a/README.org b/README.org index 08ead74..e69de29 100644 --- a/README.org +++ b/README.org @@ -1,427 +0,0 @@ -* Dotfiles - -#+PROPERTY: header-args :mkdirp yes - -/now do it with orgmode!/ - -original old configs are in =archive/=. - -** Table of Contents - -:properties: -:toc: :include all :ignore this -:end: -:contents: -- [[#my-setup][My Setup]] - - [[#zsh][zsh]] - - [[#wezterm][WezTerm]] - - [[#systemd-units][Systemd Units]] - - [[#sublime-text][Sublime Text]] - - [[#emacs][emacs]] -:end: - -** My Setup - - ...is a little in flux. - - Over the past several months, I've been investing time into [[https://blog.gabrielsimmer.com/posts/emacs-induction/][learning emacs]], replacing - Sublime in my workflow. As a part of this I've also considered using Guix (see: =seedfile.org=), - but am not quite there in my journey, so they aren't included here. - -*** zsh - - zsh is my choice of shell, with some written-in-Rust replacements for - a few CLI tools. - - =.zshrc= - -#+begin_src shell :tangle .zshrc -export ZSH="/home/gsimmer/.oh-my-zsh" - -ZSH_THEME="frisk" - -plugins=(git fzf zsh-autosuggestions) - -source $ZSH/oh-my-zsh.sh - -# User configuration -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm -[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion - -export GOPATH="/home/gsimmer/Projects/go" -export CARGOPATH="/home/gsimmer/.cargo/bin" -export PATH="/home/gsimmer/.local/bin:$GOPATH/bin:$CARGOPATH:$PATH" - -# Starship init. -#eval "$(starship init zsh)" - -# aliases for various Rust-based utils. -if [ $(which exa) != 'exa not found' ]; then - alias ls=exa -fi -if [ $(which bat) != 'bat not found' ]; then - alias cat=bat -fi -if [ $(which rg) != 'rg not found' ]; then - alias grep=rg -fi -source /usr/share/nvm/init-nvm.sh -eval "$(pyenv init -)" -#+end_src - -*** wezterm - - WezTerm is my terminal of choice these days, and is configured with Lua. - Most of the tweaks from the default config are around using Monokai Pro - colours. - - =.config/wezterm/wezterm.lua= - -#+begin_src lua :tangle .config/wezterm/wezterm.lua -local wezterm = require 'wezterm'; - -return { - automatically_reload_config = true, - font = wezterm.font("IBM Plex Mono"), - window_close_confirmation = "NeverPrompt", - font_size = 12, - initial_cols = 120, - initial_rows = 35, - colors = { - foreground = "#f7f1ff", - background = "#222222", - cursor_bg = "#8b888f", - cursor_fg = "#f7f1ff", - cursor_border = "#8b888f", - selection_fg = "#363537", - selection_bg = "#69676c", - scrollbar_thumb = "#222222", - split = "#fce566", - tab_bar = { - background = "#222222", - active_tab = { - bg_color = "#f7f1ff", - fg_color = "#69676c", - intensity = "Normal", - underline = "None", - italic = false, - strikethrough = false, - }, - - inactive_tab = { - bg_color = "#69676c", - fg_color = "#f7f1ff", - - }, - - inactive_tab_hover = { - bg_color = "#69676c", - fg_color = "#f7f1ff", - italic = true, - } - } - } -} -#+end_src - -*** systemd units - - When I move to Guix I expect I'll need to port these to Herd, but in the meantime... - -**** clock - - This runs a small webserver that renders a date that is fetched and displayed - on a Raspberry Pi with a small eink display. - - You can read more about it [[https://dev.to/gmemstr/tiny-eink-dashboard-29a4][here]]. - - =.config/systemd/user/clock.service= - -#+begin_src :tangle .config/systemd/user/clock.service -[Unit] -Description=eink Clock Server Daemon - -[Service] -WorkingDirectory=/mnt/wd/Projects/eink-dashboard -ExecStart=python server/main.py - -[Install] -WantedBy=default.target -#+end_src - -**** backup - - This runs the rclone command to back up my large data SSD to my NAS. Coupled with - a timer. - - =.config/systemd/user/backup.service= -#+begin_src :tangle .config/systemd/user/backup.service -[Unit] -Description=Backup Service for Projects -Wants=gsimmer.timer - -[Service] -Type=oneshot -WorkingDirectory=/mnt/fhg -ExecStart=bash rclone-pi.sh - -[Install] -WantedBy=default.target -#+end_src - - =.config/systemd/user/gsimmer.timer= - -#+begin_src :tangle .config/systemd/user/gsimmer.timer -[Unit] -Description=Runs backup script for project directories to Raspberry Pi. -Requires=backup.service - -[Timer] -Unit=backup.service -OnBootSec=15min -OnUnitActive=1w - -[Install] -WantedBy=timers.target -#+end_src - -*** sublime text - - Although I've moved to emacs for what I would use Sublime for, I still - keep this configuration around for quick setup in the case I need it - (e.g a virtual machine). - - Most of these settings are for Monokai Pro. - - =.config/sublime-text-3/Packages/User/Preferences.sublime-settings= - -#+begin_src json :tangle .config/sublime-text-3/Packages/User/Preferences.sublime-setting -{ - "auto_complete_delay": 20, - "color_scheme": "Monokai Pro (Filter Spectrum).sublime-color-scheme", - "font_face": "Iosevka Regular", - "font_size": 13, - "ignored_packages": - [ - "Rust", - "Vintage" - ], - "monokai_pro_file_icons": true, - "monokai_pro_highlight_open_folders": true, - "monokai_pro_minimal": true, - "monokai_pro_sidebar_headings": true, - "monokai_pro_style_title_bar": true, - "monokai_pro_ui_font_face": "IBM Plex Mono", - "rulers": - [ - 80 - ], - "theme": "Monokai Pro (Filter Spectrum).sublime-theme", - "mini_diff": "auto", - "hardware_acceleration": "opengl", - "themed_title_bar": true, -} -#+end_src - - I also keep a Package Control file to auto install stuff. - - =.config/sublime-text-3/Packages/User/Package Control.sublime-settings= - -#+begin_src json :tangle .config/sublime-text-3/Packages/User/Package Control.sublime-settings -{ - "bootstrapped": true, - "debug": true, - "in_process_packages": - [ - ], - "installed_packages": - [ - "Dockerfile Syntax Highlighting", - "Emmet", - "GitGutter", - "Gofmt", - "Golang Build", - "HexViewer", - "LSP", - "LSP-bash", - "LSP-intelephense", - "LSP-pyright", - "LSP-SourceKit", - "LSP-typescript", - "LSP-yaml", - "Package Control", - "paredit", - "Rust Enhanced", - "SideBarEnhancements", - "SublimeLinter", - "Swift", - "Theme - Monokai Pro", - "TOML", - "TypeScript", - ], -} -#+end_src - - And a Markdown specific configuration to bring the distraction-free - mode to the default windowed view. - - =.config/sublime-text-3/Packages/User/Markdown.sublime-settings= - -#+begin_src json :tangle .config/sublime-text-3/Packages/User/Markdown.sublime-settings -{ - "auto_complete": false, - "ignored_packages": ["Vintage", "Emmet", "SublimeCodeIntel"], - "draw_centered": true, - "spell_check": true, - "tab_completion": false, - "auto_complete_triggers": [], - "word_wrap": true, - "line_numbers": false, - "gutter": false, - "wrap_width": 80, - "word_wrap": true, - "scroll_past_end": true -} -#+end_src - -*** emacs - - Ah, the star of the show! I'm still working on this configuration, - and plan to split it into seperate files for each package. In the - meantime, enjoy the monolith. - - =..emacs.d/init.el= - -#+begin_src elisp :tangle .emacs.d/init.el -;; Mostly following along with System Crafter's videos. -;; So this will look pretty familiar. -(setq inhibit-startup-message t) - -(scroll-bar-mode -1) -(tool-bar-mode -1) -(tooltip-mode -1) -(set-fringe-mode 10) - -(menu-bar-mode -1) - -;; disable auto-save and auto-backup -(setq auto-save-default nil) -(setq make-backup-files nil) - -(set-face-attribute 'default nil :font "IBM Plex Mono" :height 120) -(global-set-key (kbd "") 'keyboard-escape-quit) -(setq org-edit-src-content-indentation 0 - org-src-tab-acts-natively t - org-src-preserve-indentation t) - -;; Packages stuff. -(require 'package) - -(setq package-archives '(("melpa" . "https://melpa.org/packages/") - ("org" . "https://orgmode.org/elpa/") - ("elpa" . "https://elpa.gnu.org/packages/"))) - -(package-initialize) -(unless package-archive-contents - (package-refresh-contents)) - -(unless (package-installed-p 'use-package) - (package-install 'use-package)) - -(require 'use-package) -(setq use-package-always-ensure t) - -;; I like Monokai Pro, sue me ;) -(use-package monokai-pro-theme - :ensure t - :config - (load-theme 'monokai-pro-spectrum t)) - -(use-package doom-modeline - :ensure t - :init (doom-modeline-mode 1) - :custom - (doom-mode-line-height 15)) -(use-package all-the-icons :ensure t) - -(use-package treemacs - :ensure t - :defer t - :init - :bind (:map global-map - ("M-0" . treemacs-select-window) - ("C-x t t" . treemacs))) -(use-package treemacs-projectile - :ensure t) -;; LSP config. -(use-package spinner :ensure t) -(use-package lsp-mode - :ensure t - :init - (setq lsp-keymap-prefix "C-c l") - :hook ((rust-mode . lsp) - (lsp-mode . lsp-enable-which-key-integration)) - :commands lsp) - -(use-package lsp-ui :commands lsp-ui-mode) -(use-package lsp-ivy :commands lsp-ivy-workspace-symbol) -(use-package lsp-treemacs :commands lsp-treemacs-errors-list) - -(use-package rust-mode) - -;; Can't have lisps without paredit! -(use-package paredit - :ensure t - :config - (add-hook 'emacs-lisp-mode-hook #'paredit-mode) - ;; enable in the *scratch* buffer - (add-hook 'lisp-interaction-mode-hook #'paredit-mode) - (add-hook 'ielm-mode-hook #'paredit-mode) - (add-hook 'lisp-mode-hook #'paredit-mode) - (add-hook 'eval-expression-minibuffer-setup-hook #'paredit-mode)) - -(use-package projectile - :ensure t - :init - (projectile-mode +1) - :bind (:map projectile-mode-map - ("s-p" . projectile-command-map) - ("C-c p" . projectile-command-map)) - :config - (setq projectile-project-search-path '("~/Projects"))) - -;; Ivy/Swiper/Counsel config. -(use-package swiper) -(use-package counsel) -(use-package ivy - :diminish - :bind (("C-s" . swiper) - :map ivy-minibuffer-map - ("TAB" . ivy-alt-done) - ("C-l" . ivy-alt-done) - ("C-j" . ivy-next-line) - ("C-k" . ivy-previous-line) - :map ivy-switch-buffer-map - ("C-k" . ivy-previous-line) - ("C-l" . ivy-done) - ("C-d" . ivy-switch-buffer-kill) - :map ivy-reverse-i-search-map - ("C-k" . ivy-previous-line) - ("C-d" . ivy-reverse-i-search-kill)) - :config - (ivy-mode 1)) -(custom-set-variables - ;; custom-set-variables was added by Custom. - ;; 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. - '(package-selected-packages - '(treemacs-projectile projectile paredit all-the-fonts doom-modeline rust-mode swipe spinner lsp-treemacs lsp-ivy lsp-ui lsp-mode counsel swiper ivy treemacs use-package monokai-pro-theme))) -(custom-set-faces - ;; custom-set-faces was added by Custom. - ;; 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. - ) -#+end_src diff --git a/Systems.org b/Systems.org new file mode 100644 index 0000000..a79789e --- /dev/null +++ b/Systems.org @@ -0,0 +1,159 @@ +* Systems + +I have opted to use NixOS for my systems moving forward. You can read a bit more +about this move [[https://blog.gabrielsimmer.com/posts/from-guix-to-nixos][here]]. I haven't dabbled with custom configuration too much so +this is pretty close to the default configuration. + +#+begin_src nix :tangle configuration.nix +{ config, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ]; + + nixpkgs.config.allowUnfree = true; + + boot.kernelPackages = pkgs.linuxPackages_latest; + + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "london"; + + # i18n stuff. + time.timeZone = "Europe/London"; + i18n.defaultLocale = "en_US.UTF-8"; + console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + }; + + # Networking stuff. + networking.useDHCP = false; + networking.interfaces.enp4s0.useDHCP = true; + services.tailscale.enable = true; + + # Enable the X11 windowing system. + services.xserver.enable = true; + services.xserver.videoDrivers = [ "nvidia" ]; + + # Required for Steam to work properly. + hardware.opengl.driSupport32Bit = true; + + # Enable the GNOME Desktop Environment. + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; + + + # Configure keymap in X11 + services.xserver.layout = "us"; + # services.xserver.xkbOptions = "eurosign:e"; + + # Enable CUPS to print documents. + # services.printing.enable = true; + hardware.pulseaudio.enable = false; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + + programs.zsh.enable = true; + users.users.gsimmer = { + isNormalUser = true; + shell = pkgs.zsh; + extraGroups = [ "wheel" "networkmanager" ]; + }; + + environment.systemPackages = with pkgs; [ + vim + wget + firefox + emacs + curl + flatpak + podman + tailscale + ]; + + programs.mtr.enable = true; + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "21.05"; # Did you read the comment? + +} +#+end_src + +My goal here is to leverage the hardware configuration generated by +the NixOS to seperate out the specific-to-my-current-hardware configuration. + +#+begin_src nix :tangle hardware-configuration.nix +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + services.xserver = { + libinput = { + enable = true; + mouse = { accelProfile = "flat"; }; + }; + }; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/eb8699bd-a9e9-4166-8879-559b244caa20"; + fsType = "ext4"; + options = [ "noatime" "nodiratime" "discard" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/D582-4408"; + fsType = "vfat"; + options = [ "noatime" "nodiratime" "discard" ]; + }; + + fileSystems."/mnt/wd" = + { device = "/dev/disk/by-partlabel/WD"; + fsType = "ext4"; + options = [ "noatime" "nodiratime" "discard" ]; + }; + + fileSystems."/mnt/fhg" = + { device = "/dev/disk/by-label/FHG"; + fsType = "ext4"; + options = [ "noatime" "nodiratime" "discard" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/8a0c74ad-a88f-4ecd-a6ac-d7985355bce6"; } + ]; + + # high-resolution display + hardware.video.hidpi.enable = lib.mkDefault true; +} +#+end_src diff --git a/seedfile.org b/seedfile.org deleted file mode 100644 index debf9af..0000000 --- a/seedfile.org +++ /dev/null @@ -1,372 +0,0 @@ -* What is this? - -Welcome to the seedfile! This file contains all the code required to generate (so far) the -following: - -+ Multi-device emacs configuration (WIP). -+ Base Guix configuration and per device configuration. - -Other things may be added later. In the meantime, enjoy the tangle! - -* Emacs Configuration - -Starting in 2021, I've moved what I would use Sublime Text for over to Emacs. As such, I need a -relatively usable configuration. Attempts to use DOOMEmacs/spacemacs mostly led to frustration -as I didn't learn the underlying editor. - -** The Basics & UI Tweaks - -Some of the basics include turning off some of the defaults for a more focused experience, akin -to what you'd expect from ST. - -#+begin_src elisp :tangle .config/emacs.d/init.el -(setq inhibit-startup-message t) - -(scroll-bar-mode -1) -(tool-bar-mode -1) -(tooltip-mode -1) -(set-fringe-mode 10) - -(menu-bar-mode -1) - -(set-face-attribute 'default nil :font "IBM Plex Mono" :height 120) -(global-set-key (kbd "") 'keyboard-escape-quit) -(setq org-edit-src-content-indentation 0 - org-src-tab-acts-natively t - org-src-preserve-indentation t) -#+end_src - -** Packages - -Next is a relatively lengthy packages block. There's a few key elements here, -including my theme of choice (Monokai Pro) and the setup of several useful -UI/UX elements such as treemacs, LSP mode, ivy and projectile, among others. -Eventually this will be split into its own file. - -#+begin_src elisp :tangle .config/emacs.d/init.el -;; Packages stuff. -(require 'package) - -(setq package-archives '(("melpa" . "https://melpa.org/packages/") - ("org" . "https://orgmode.org/elpa/") - ("elpa" . "https://elpa.gnu.org/packages/"))) - -(package-initialize) -(unless package-archive-contents - (package-refresh-contents)) - -(unless (package-installed-p 'use-package) - (package-install 'use-package)) - -(require 'use-package) -(setq use-package-always-ensure t) - -;; I like Monokai Pro, sue me ;) -(use-package monokai-pro-theme - :ensure t - :config - (load-theme 'monokai-pro-spectrum t)) - -(use-package doom-modeline - :ensure t - :init (doom-modeline-mode 1) - :custom - (doom-mode-line-height 15)) -(use-package all-the-icons :ensure t) - -(use-package treemacs - :ensure t - :defer t - :init - :bind (:map global-map - ("M-0" . treemacs-select-window) - ("C-x t t" . treemacs))) -(use-package treemacs-projectile - :ensure t) -;; LSP config. -(use-package spinner :ensure t) -(use-package lsp-mode - :ensure t - :init - (setq lsp-keymap-prefix "C-c l") - :hook ((rust-mode . lsp) - (lsp-mode . lsp-enable-which-key-integration)) - :commands lsp) - -(use-package lsp-ui :commands lsp-ui-mode) -(use-package lsp-ivy :commands lsp-ivy-workspace-symbol) -(use-package lsp-treemacs :commands lsp-treemacs-errors-list) - -(use-package rust-mode) - -;; Can't have lisps without paredit! -(use-package paredit - :ensure t - :config - (add-hook 'emacs-lisp-mode-hook #'paredit-mode) - ;; enable in the *scratch* buffer - (add-hook 'lisp-interaction-mode-hook #'paredit-mode) - (add-hook 'ielm-mode-hook #'paredit-mode) - (add-hook 'lisp-mode-hook #'paredit-mode) - (add-hook 'eval-expression-minibuffer-setup-hook #'paredit-mode)) - -(use-package projectile - :ensure t - :init - (projectile-mode +1) - :bind (:map projectile-mode-map - ("s-p" . projectile-command-map) - ("C-c p" . projectile-command-map)) - :config - (setq projectile-project-search-path '("~/Projects"))) - -;; Ivy/Swiper/Counsel config. -(use-package swiper) -(use-package counsel) -(use-package ivy - :diminish - :bind (("C-s" . swiper) - :map ivy-minibuffer-map - ("TAB" . ivy-alt-done) - ("C-l" . ivy-alt-done) - ("C-j" . ivy-next-line) - ("C-k" . ivy-previous-line) - :map ivy-switch-buffer-map - ("C-k" . ivy-previous-line) - ("C-l" . ivy-done) - ("C-d" . ivy-switch-buffer-kill) - :map ivy-reverse-i-search-map - ("C-k" . ivy-previous-line) - ("C-d" . ivy-reverse-i-search-kill)) - :config - (ivy-mode 1)) -(custom-set-variables - ;; custom-set-variables was added by Custom. - ;; 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. - '(package-selected-packages - '(treemacs-projectile projectile paredit all-the-fonts doom-modeline rust-mode swipe spinner lsp-treemacs lsp-ivy lsp-ui lsp-mode counsel swiper ivy treemacs use-package monokai-pro-theme))) -(custom-set-faces - ;; custom-set-faces was added by Custom. - ;; 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. - ) -#+end_src - -* Guix Configuration - -** Channels - -I don't really need any fancy channels, besides nonguix and my own repository. - -#+begin_src scheme :tangle .config/guix/channels.scm -;; This file is generated from ~/dotfiles/guix/system-config/base.org. -(list (channel - (name 'nonguix) - (url "https://gitlab.com/nonguix/nonguix")) - (channel - (name 'gguix) - (url "https://github.com/gmemstr/gguix")) - (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (introduction - (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" - (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) -#+end_src - -** Systems - -*** Base Configuration - -Just some basic importing of modules for now. I'm using the nonfree Linux kernel -from nonguix. - -#+begin_src scheme :tangle .config/guix/systems/base-system.scm -;; This file is geneated from ~/dotfiles/guix/system-config/base.org -(define-module (base-system) - #:use-module (gnu) - #:use-module (srfi srfi-1) - #:use-module (gnu system nss) - #:use-module (gnu services pm) - #:use-module (gnu services cups) - #:use-module (gnu services desktop) - #:use-module (gnu services docker) - #:use-module (gnu services networking) - #:use-module (gnu services virtualization) - #:use-module (gnu packages wm) - #:use-module (gnu packages cups) - #:use-module (gnu packages vim) - #:use-module (gnu packages gtk) - #:use-module (gnu packages xorg) - #:use-module (gnu packages emacs) - #:use-module (gnu packages file-systems) - #:use-module (gnu packages gnome) - #:use-module (gnu packages mtools) - #:use-module (gnu packages linux) - #:use-module (gnu packages audio) - #:use-module (gnu packages gnuzilla) - #:use-module (gnu packages pulseaudio) - #:use-module (gnu packages web-browsers) - #:use-module (gnu packages version-control) - #:use-module (gnu packages package-management) - #:use-module (nongnu packages linux) - #:use-module (nongnu system linux-initrd)) - -(use-service-modules nix) -(use-service-modules desktop xorg) -(use-package-modules certs) -(use-package-modules shells) - -(define %xorg-libinput-config - "Section \"InputClass\" - Identifier \"Touchpads\" - Driver \"libinput\" - MatchDevicePath \"/dev/input/event*\" - MatchIsTouchpad \"on\" - - Option \"Tapping\" \"on\" - Option \"TappingDrag\" \"on\" - Option \"DisableWhileTyping\" \"on\" - Option \"MiddleEmulation\" \"on\" - Option \"ScrollMethod\" \"twofinger\" -EndSection -Section \"InputClass\" - Identifier \"Keyboards\" - Driver \"libinput\" - MatchDevicePath \"/dev/input/event*\" - MatchIsKeyboard \"on\" -EndSection -") - -#+end_src - -And now we can configure the actual base OS. This is more or less everything I'd need -in a typing install of Guix/Linux. - -#+begin_src scheme :tangle .config/guix/systems/base-system.scm -(define-public base-operating-system - (operating-system - (host-name "london") - (timezone "Europe/London") - (locale "en_US.utf8") - - ;; Nonfree stuff - (kernel linux) - (firmware (list linux-firmware)) - (initrd microcode-initrd) - - (keyboard-layout (keyboard-layout "us" "intl")) - - (bootloader (bootloader-configuration - (bootloader grub-efi-bootloader) - (target "/boot/efi") - (keyboard-layout keyboard-layout))) - - (file-systems (cons* - (file-system - (device "/dev/sda1") - (mount-point "/boot") - (type "vfat")) - (file-system - (device "/dev/sda2") - (mount-point "/") - (type "ext4")) %base-file-systems)) - - (users (cons (user-account - (name "gsimmer") - (comment "Gabriel Simmer") - (password (crypt "pass" "$6$abc")) - (group "users") - (supplementary-groups '("wheel" "netdev" - "audio" "video" - "docker" "kvm" - "tty" "input" - "realtime" "audio" - "video"))) - %base-user-accounts)) - (groups (cons (user-group (system? #t) (name "realtime")) - %base-groups)) - - (packages (append (list - git - exfat-utils - fuse-exfat - stow - vim - emacs - xterm - pulseaudio - xf86-input-libinput - nss-certs - gvfs) %base-packages)) - (services (append (list (service gnome-desktop-service-type) - (set-xorg-configuration - (xorg-configuration - (keyboard-layout keyboard-layout))) - (service docker-service-type)) - %desktop-services)) - (name-service-switch %mdns-host-lookup-nss))) -#+end_src - -*** Individual Systems - -**** London - -London is my primary custom built desktop, with - -+ 256GB Samsung 860 NVMe SSD + 1TB WD SATA SSD + 500GB Samsung SATA SSD -+ 16GB Corsair Vengeance RGB Pro DDR4-3200 CL16 -+ AMD Ryzen 7 3700x -+ Asus GeForce GTX 1070 8GB - -#+begin_src scheme :tangle .config/guix/systems/london.scm -(define-module (london) - #:use-module (base-system) - #:use-module (gnu)) - -(operating-system - (inherit base-operating-system) - (host-name "london") - - (file-systems (cons* - (file-system - (device "/dev/nvme0n1p1") - (mount-point "/boot/efi") - (type "vfat")) - (file-system - (device "/dev/nvme0n1p2") - (mount-point "/") - (type "ext4")) - (file-system - (device "/dev/sda1") - (mount-point "/home/gsimmer/wd") - (type "ext4")) - (file-system - (device "/dev/sdb1") - (mount-point "/home/gsimmer/fhg") - (type "ext4")) - %base-file-systems))) -#+end_src - -**** Virtual - -This applies to any random Guix VM I spin up, usually for testing configurations. - -#+begin_src scheme :tangle .config/guix/systems/virtual.scm -(define-module (virtual) - #:use-module (base-system) - #:use-module (gnu)) - -(operating-system - (inherit base-operating-system) - (host-name "virtual") - (bootloader (bootloader-configuration - (bootloader grub-bootloader) - (target "/dev/sda") - (keyboard-layout (keyboard-layout "us"))))) -#+end_src