Add NixOS configuration, remove Guix config.
This commit is contained in:
parent
1098a1e102
commit
de5becce6c
|
@ -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
|
||||
|
|
|
@ -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")))))
|
|
@ -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)))
|
|
@ -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)))
|
|
@ -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")))))
|
|
@ -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.
|
||||
|
|
421
Dots.org
Normal file
421
Dots.org
Normal file
|
@ -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 "<escape>") '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
|
||||
|
427
README.org
427
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 "<escape>") '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
|
159
Systems.org
Normal file
159
Systems.org
Normal file
|
@ -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
|
372
seedfile.org
372
seedfile.org
|
@ -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 "<escape>") '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
|
Loading…
Reference in a new issue