In the beginning there was darkness.
This commit is contained in:
commit
87c5c650b9
15 changed files with 2284 additions and 0 deletions
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
# ---> Nix
|
||||
# Ignore build outputs from performing a nix-build or `nix build` command
|
||||
result
|
||||
result-*
|
||||
hardware-configuration.nix
|
||||
|
||||
# Ignore Emacs temp files
|
||||
*~
|
||||
|
29
Makefile
Normal file
29
Makefile
Normal file
|
@ -0,0 +1,29 @@
|
|||
##
|
||||
# Nix Configuration
|
||||
#
|
||||
# @file
|
||||
# @version 0.1
|
||||
|
||||
HOST ?= ziltis-desktop
|
||||
DEVICE ?= nvme0n1
|
||||
|
||||
#configuration.nix: hosts/${HOST}.nix
|
||||
# ln -s "$<" "$@"
|
||||
|
||||
disko: disko-config.nix
|
||||
sed -i "s|.*DEVICE_NAME| device = \"/dev/$(DEVICE)\"; # DEVICE_NAME|g" disko-config.nix
|
||||
nix run \
|
||||
--extra-experimental-features nix-command \
|
||||
--extra-experimental-features flakes \
|
||||
github:nix-community/disko -- \
|
||||
--mode disko \
|
||||
./disko-config.nix
|
||||
|
||||
install-system: configuration.nix
|
||||
sed -i "s|.*DEVICE_HOSTNAME| networking.hostName = \"$(HOST)\"; # DEVICE_HOSTNAME|g" configuration.nix
|
||||
nixos-generate-config --no-filesystems --root /mnt
|
||||
cp configuration.nix /mnt/etc/nixos
|
||||
cp disko-config.nix /mnt/etc/nixos
|
||||
nixos-install
|
||||
|
||||
# end
|
2
README.md
Normal file
2
README.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
# nixconfig
|
||||
|
171
configuration.nix
Normal file
171
configuration.nix
Normal file
|
@ -0,0 +1,171 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running `nixos-help`).
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
networking.hostName = "ziltis-desktop"; # Define your hostname.
|
||||
# Pick only one of the below networking options.
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Select internationalisation properties.
|
||||
# i18n.defaultLocale = "en_US.UTF-8";
|
||||
console = {
|
||||
font = "Lat2-Terminus16";
|
||||
# keyMap = "de";
|
||||
useXkbConfig = true; # use xkbOptions in tty.
|
||||
};
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
# services.xserver.enable = true;
|
||||
|
||||
programs.hyprland.enable = true;
|
||||
services.flatpak.enable = true;
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.layout = "de";
|
||||
services.xserver.xkbOptions = "eurosign:e,caps:escape";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable sound.
|
||||
# sound.enable = true;
|
||||
# hardware.pulseaudio.enable = true;
|
||||
# rtkit is optional but recommended
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
# If you want to use JACK applications, uncomment this
|
||||
#jack.enable = true;
|
||||
};
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
services.xserver.enable = true;
|
||||
services.xserver.libinput.enable = true;
|
||||
services.xserver.displayManager.sddm.enable = true;
|
||||
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
# users.users.alice = {
|
||||
# isNormalUser = true;
|
||||
# extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||
# packages = with pkgs; [
|
||||
# firefox
|
||||
# tree
|
||||
# ];
|
||||
# };
|
||||
|
||||
users.users.zilti = {
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" ];
|
||||
};
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
wget
|
||||
git
|
||||
];
|
||||
|
||||
|
||||
virtualisation = {
|
||||
podman = {
|
||||
enable = true;
|
||||
dockerCompat = true;
|
||||
defaultNetwork.settings.dns_enabled = true;
|
||||
};
|
||||
containers.storage.settings = {
|
||||
storage = {
|
||||
driver = "btrfs";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
services.hardware.bolt.enable = true;
|
||||
|
||||
hardware.tuxedo-keyboard.enable = true;
|
||||
hardware.tuxedo-rs = {
|
||||
enable = true;
|
||||
tailor-gui.enable = true;
|
||||
};
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
networking.extraHosts = ''
|
||||
127.0.0.1 l.redsky.io
|
||||
::1 l.redsky.io
|
||||
'';
|
||||
|
||||
security.pam.services.swaylock = {};
|
||||
|
||||
fileSystems = {
|
||||
"/".options = [ "compress=zstd" ];
|
||||
"/home".options = [ "compress=zstd" ];
|
||||
"/nix".options = [ "compress=zstd" "noatime" ];
|
||||
# "/swap".options = [ "noatime" ];
|
||||
};
|
||||
|
||||
services.btrfs = {
|
||||
autoScrub = {
|
||||
enable = true;
|
||||
interval = "weekly";
|
||||
fileSystems = [ "/" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Copy the NixOS configuration file and link it from the resulting system
|
||||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
# system.copySystemConfiguration = true;
|
||||
|
||||
# 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 = "23.05"; # Did you read the comment?
|
||||
|
||||
}
|
||||
|
52
disko-config.nix
Normal file
52
disko-config.nix
Normal file
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
disko.devices = {
|
||||
disk = {
|
||||
main = {
|
||||
#device = builtins.elemAt disks 0;
|
||||
device = "/dev/nvme0n1"; # DEVICE_NAME
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
priority = 1;
|
||||
name = "ESP";
|
||||
size = "500M";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "btrfs";
|
||||
extraArgs = [ "-f" ];
|
||||
subvolumes = {
|
||||
"/rootfs" = {
|
||||
mountOptions = [ "compress=zstd" ];
|
||||
mountpoint = "/";
|
||||
};
|
||||
"/home" = {
|
||||
mountOptions = [ "compress=zstd" ];
|
||||
mountpoint = "/home";
|
||||
};
|
||||
"/nix" = {
|
||||
mountOptions = [ "compress=zstd" "noatime" ];
|
||||
mountpoint = "/nix";
|
||||
};
|
||||
"/swap" = {
|
||||
mountOptions = [ "subvol=swap" ];
|
||||
mountpoint = "/swap";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
73
emacs/emacs.nix
Normal file
73
emacs/emacs.nix
Normal file
|
@ -0,0 +1,73 @@
|
|||
{ config, lib, pkgs, ...}:
|
||||
|
||||
{
|
||||
home.file.".emacs.d/early-init.el" = {
|
||||
enable = false;
|
||||
text = "(setq package-enable-at-startup nil)";
|
||||
};
|
||||
home.file.".emacs.d/init.el" = {
|
||||
enable = true;
|
||||
text = builtins.readFile ./init.el;
|
||||
};
|
||||
home.file.".emacs.d/templates" = {
|
||||
enable = true;
|
||||
text = builtins.readFile ./templates;
|
||||
};
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
package = pkgs.emacs29-gtk3;
|
||||
extraConfig = builtins.readFile ./init.el;
|
||||
extraPackages = epkgs: with epkgs; [
|
||||
cape
|
||||
catppuccin-theme
|
||||
cider
|
||||
circe
|
||||
clojure-ts-mode
|
||||
code-review
|
||||
color-theme-modern
|
||||
consult
|
||||
consult-eglot
|
||||
corfu
|
||||
corfu-terminal
|
||||
dhall-mode
|
||||
editorconfig
|
||||
eglot
|
||||
el-patch
|
||||
embark
|
||||
embark-consult
|
||||
evil
|
||||
evil-collection
|
||||
forge
|
||||
geiser
|
||||
git-gutter
|
||||
goto-chg
|
||||
keychain-environment
|
||||
lispy
|
||||
lispyville
|
||||
lsp-scheme
|
||||
magit
|
||||
magit-todos
|
||||
marginalia
|
||||
moe-theme
|
||||
nerd-icons-completion
|
||||
nerd-icons-corfu
|
||||
nix-ts-mode
|
||||
orderless
|
||||
org
|
||||
org-modern
|
||||
org-rainbow-tags
|
||||
org-roam
|
||||
org-roam-ui
|
||||
pass
|
||||
password-store
|
||||
password-store-otp
|
||||
rainbow-delimiters
|
||||
tempel
|
||||
tree-sitter
|
||||
tree-sitter-langs
|
||||
vertico
|
||||
websocket
|
||||
which-key
|
||||
];
|
||||
};
|
||||
}
|
525
emacs/init.el
Normal file
525
emacs/init.el
Normal file
|
@ -0,0 +1,525 @@
|
|||
;;; init.el --- Description -*- lexical-binding: t; -*-
|
||||
;;
|
||||
;; Copyright (C) 2023 Daniel Ziltener
|
||||
;;
|
||||
;; Author: Daniel Ziltener <dziltener@lyrion.ch>
|
||||
;; Maintainer: Daniel Ziltener <dziltener@lyrion.ch>
|
||||
;; Created: November 13, 2023
|
||||
;; Modified: November 13, 2023
|
||||
;; Version: 0.0.1
|
||||
;; Keywords: abbrev bib c calendar comm convenience data docs emulations extensions faces files frames games hardware help hypermedia i18n internal languages lisp local maint mail matching mouse multimedia news outlines processes terminals tex tools unix vc wp
|
||||
;; Homepage: https://github.com/dziltener@lyrion.ch/init
|
||||
;; Package-Requires: ((emacs "24.3"))
|
||||
;;
|
||||
;; This file is not part of GNU Emacs.
|
||||
;;
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; Description
|
||||
;;
|
||||
;;; Code:
|
||||
|
||||
;;;; Early Variables
|
||||
(setq custom-file "~/.emacs.d/custom.el")
|
||||
(when (file-exists-p custom-file)
|
||||
(load custom-file))
|
||||
|
||||
;;;; Personal Information Setup
|
||||
(setq user-full-name "Daniel Ziltener"
|
||||
user-mail-address "dziltener@lyrion.ch")
|
||||
(auth-source-pass-enable)
|
||||
|
||||
;;;; Straight.el
|
||||
|
||||
;; (defvar bootstrap-version)
|
||||
;; (let ((bootstrap-file
|
||||
;; (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
|
||||
;; (bootstrap-version 6))
|
||||
;; (unless (file-exists-p bootstrap-file)
|
||||
;; (with-current-buffer
|
||||
;; (url-retrieve-synchronously
|
||||
;; "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
|
||||
;; 'silent 'inhibit-cookies)
|
||||
;; (goto-char (point-max))
|
||||
;; (eval-print-last-sexp)))
|
||||
;; (load bootstrap-file nil 'nomessage))
|
||||
;; (setq straight-use-package-by-default t)
|
||||
|
||||
;;;; Package Management Configuration
|
||||
;; See: https://github.com/radian-software/el-patch
|
||||
(use-package el-patch)
|
||||
|
||||
;;;; Emacs
|
||||
(use-package emacs
|
||||
:custom
|
||||
(completion-cycle-threshold 10)
|
||||
(read-extended-command-predicate #'command-completion-default-include-p)
|
||||
(tab-always-indent 'complete)
|
||||
(global-hl-line-mode t)
|
||||
(menu-bar-mode nil)
|
||||
(scroll-bar-mode nil)
|
||||
(tool-bar-mode nil))
|
||||
|
||||
;;;; Org Mode
|
||||
(use-package org
|
||||
:ensure t
|
||||
:hook
|
||||
(org-src-mode . hack-local-variables)
|
||||
:config
|
||||
(setq org-directory "~/org")
|
||||
(add-to-list 'org-modules 'collector))
|
||||
|
||||
(use-package org-roam
|
||||
:ensure t
|
||||
:custom
|
||||
(org-roam-directory "~/org/roam")
|
||||
:config
|
||||
(progn (org-roam-db-autosync-mode)))
|
||||
|
||||
(use-package websocket
|
||||
:ensure t
|
||||
:after org-roam)
|
||||
|
||||
(use-package org-roam-ui
|
||||
:ensure t
|
||||
:after org-roam
|
||||
:custom
|
||||
(org-roam-ui-sync-theme t)
|
||||
(org-roam-ui-follow t)
|
||||
(org-roam-ui-update-on-save t)
|
||||
(org-roam-ui-open-on-start t))
|
||||
|
||||
(use-package org-modern
|
||||
:ensure t
|
||||
:hook
|
||||
((org-mode . org-modern-mode)
|
||||
(org-agenda-finalize . org-modern-agenda)))
|
||||
|
||||
(use-package org-rainbow-tags
|
||||
:hook
|
||||
(org-mode . org-rainbow-tags-mode))
|
||||
|
||||
;;;; Design
|
||||
(use-package color-theme-modern)
|
||||
(use-package moe-theme)
|
||||
(use-package catppuccin-theme
|
||||
:custom
|
||||
(catppuccin-flavor 'mocha)
|
||||
(catppuccin-highlight-matches t)
|
||||
(catppuccin-italic-comments t)
|
||||
:custom-face
|
||||
(font-lock-doc-face ((t (:inherit font-lock-comment-face
|
||||
:foreground "#fab387"))))
|
||||
:config
|
||||
(load-theme 'catppuccin))
|
||||
|
||||
(set-frame-parameter nil 'alpha-background 80)
|
||||
(add-to-list 'default-frame-alist '(alpha-background . 80))
|
||||
(set-frame-font "Victor Mono Nerd Font-10:bold" nil t)
|
||||
|
||||
;;;; Security
|
||||
(use-package keychain-environment
|
||||
:init
|
||||
(keychain-refresh-environment))
|
||||
|
||||
(use-package pass)
|
||||
(use-package password-store)
|
||||
(use-package password-store-otp)
|
||||
|
||||
;;;; Evil Mode
|
||||
(use-package evil
|
||||
;; :after evil-leader
|
||||
:ensure t
|
||||
:init
|
||||
(setq evil-want-keybinding nil)
|
||||
:config
|
||||
(evil-set-leader 'normal (kbd "<SPC>"))
|
||||
(evil-set-leader 'normal (kbd "z") t)
|
||||
(evil-mode 1)
|
||||
:bind
|
||||
(:map evil-normal-state-map
|
||||
("<leader>f" . 'find-file)
|
||||
("<leader>k" . 'kill-buffer)))
|
||||
|
||||
(use-package evil-collection
|
||||
:after evil
|
||||
:ensure t
|
||||
:custom
|
||||
(evil-collection-outline-bind-tab-p 1)
|
||||
:commands evil-collection-init
|
||||
:init
|
||||
(evil-collection-init))
|
||||
|
||||
;;;; Search, Completion, Execution
|
||||
;;;;; Preliminary Packages
|
||||
(use-package savehist
|
||||
:init
|
||||
(savehist-mode))
|
||||
|
||||
(use-package orderless
|
||||
:after eglot
|
||||
:config
|
||||
(setq completion-styles '(orderless basic)
|
||||
completion-category-defaults nil
|
||||
completion-category-overrides '((file (styles partial-completion)))))
|
||||
|
||||
(use-package consult
|
||||
:bind
|
||||
(:map evil-normal-state-map
|
||||
("<leader><SPC>" . 'consult-find)
|
||||
("<leader>es" . 'consult-eglot-symbols)
|
||||
("<leader>b" . 'consult-buffer)
|
||||
("<leader>g/" . 'consult-git-grep)
|
||||
("<leader>/" . 'consult-grep)
|
||||
("/" . 'consult-line)))
|
||||
|
||||
(use-package embark
|
||||
:bind
|
||||
("C-<SPC>" . 'embark-act)
|
||||
("C-M-<return>" . 'embark-bindings))
|
||||
|
||||
(use-package embark-consult
|
||||
:after (embark consult)
|
||||
:hook
|
||||
(embark-collect-mode . consult-preview-at-point-mode))
|
||||
|
||||
(use-package vertico
|
||||
:commands
|
||||
vertico-mode
|
||||
:init
|
||||
(vertico-mode))
|
||||
|
||||
(use-package marginalia
|
||||
:commands
|
||||
marginalia-mode
|
||||
:init
|
||||
(marginalia-mode))
|
||||
|
||||
(use-package nerd-icons-completion
|
||||
:after marginalia
|
||||
:commands
|
||||
nerd-icons-completion-mode
|
||||
:hook
|
||||
(marginalia-mode-hook . nerd-icons-completion-marginalia-setup)
|
||||
:init
|
||||
(nerd-icons-completion-mode))
|
||||
|
||||
(use-package which-key
|
||||
:commands
|
||||
which-key-setup-minibuffer
|
||||
:init
|
||||
(which-key-setup-minibuffer))
|
||||
|
||||
;;;;; Code Completion
|
||||
(use-package cape
|
||||
:config
|
||||
(advice-add 'eglot-completion-at-point :around #'cape-wrap-buster))
|
||||
|
||||
(defun my/corfu-combined-sort (candidates)
|
||||
"Sort CANDIDATES using both display-sort-function and corfu-sort-function."
|
||||
(let ((candidates
|
||||
(let ((display-sort-func (corfu--metadata-get 'display-sort-function)))
|
||||
(if display-sort-func
|
||||
(funcall display-sort-func candidates)
|
||||
candidates))))
|
||||
(if corfu-sort-function
|
||||
(funcall corfu-sort-function candidates)
|
||||
candidates)))
|
||||
|
||||
(use-package corfu
|
||||
:custom
|
||||
(corfu-cycle t)
|
||||
(corfu-preselect 'prompt)
|
||||
(corfu-auto t)
|
||||
(corfu-scroll-margin 5)
|
||||
(corfu-quit-no-match 'separator)
|
||||
(evil-collection-corfu-key-themes '(tab-n-go))
|
||||
:config
|
||||
(setq corfu-sort-override-function #'my/corfu-combined-sort)
|
||||
:commands
|
||||
global-corfu-mode
|
||||
:init
|
||||
(global-corfu-mode)
|
||||
;:bind
|
||||
;; (:map corfu-map
|
||||
;; ("TAB" . corfu-next)
|
||||
;; ([tab] . corfu-next)
|
||||
;; ("S-TAB" . corfu-previous)
|
||||
;; ([backtab] . corfu-previous))
|
||||
)
|
||||
|
||||
(use-package corfu-history
|
||||
:config
|
||||
(add-to-list 'savehist-additional-variables 'corfu-history)
|
||||
:hook
|
||||
(global-corfu-mode . corfu-history-mode))
|
||||
|
||||
(use-package corfu-popupinfo
|
||||
:after (corfu corfu-terminal)
|
||||
:custom
|
||||
(corfu-popupinfo-delay '(0.1 . 0.5))
|
||||
:commands
|
||||
corfu-popupinfo-mode
|
||||
:init
|
||||
(corfu-popupinfo-mode))
|
||||
|
||||
(use-package nerd-icons-corfu
|
||||
:after corfu
|
||||
:init
|
||||
(add-to-list 'corfu-margin-formatters 'nerd-icons-corfu-formatter))
|
||||
|
||||
(use-package corfu-terminal
|
||||
:if (display-graphic-p)
|
||||
:after corfu
|
||||
:commands
|
||||
corfu-terminal-mode
|
||||
:init
|
||||
(corfu-terminal-mode +1))
|
||||
|
||||
(use-package tempel)
|
||||
|
||||
;;;; Basic Navigation
|
||||
(use-package goto-chg
|
||||
:bind
|
||||
(:map evil-normal-state-map
|
||||
("g," . 'goto-last-change)
|
||||
("g;" . 'goto-last-change-reverse)))
|
||||
|
||||
;;;; Lisp Navigation and Editing
|
||||
;;;;; Basic
|
||||
(use-package lispy
|
||||
;;:custom
|
||||
;;(lispy-compat ("cider" "edebug" "magit-blame-mode"))
|
||||
:hook
|
||||
emacs-lisp-mode
|
||||
:config
|
||||
(setq lispy-close-quotes-at-end-p t)
|
||||
(evil-define-key 'insert 'prog-mode-map
|
||||
"(" #'lispy-parens
|
||||
"{" #'lispy-braces
|
||||
"}" #'special-lispy-brackets
|
||||
")" #'lispy-right-nostring
|
||||
"\"" #'lispy-quotes
|
||||
(kbd "<DEL>") #'lispy-delete-backward
|
||||
">" #'special-lispy-slurp
|
||||
"<" #'special-lispy-barf
|
||||
"r" #'special-lispy-raise
|
||||
"e" #'special-lispy-eval))
|
||||
|
||||
(use-package lispyville
|
||||
:bind
|
||||
(:map evil-normal-state-map
|
||||
("<leader>," . 'lispyville-comment-or-uncomment)
|
||||
("<leader>." . 'lispyville-comment-and-clone-dwim)
|
||||
("<leader>ci" . 'lispyville-comment-or-uncomment-line))
|
||||
:hook
|
||||
(lispy-mode . lispyville-mode))
|
||||
|
||||
;;;;; Visual Aid
|
||||
(use-package rainbow-delimiters
|
||||
:hook
|
||||
emacs-lisp-mode)
|
||||
|
||||
;;;; Programming
|
||||
(use-package editorconfig
|
||||
:commands
|
||||
editorconfig-mode
|
||||
:init
|
||||
(editorconfig-mode 1))
|
||||
|
||||
(defun my/eglot-capf ()
|
||||
(setq-local completion-at-point-functions
|
||||
(list (cape-super-capf
|
||||
#'eglot-completion-at-point
|
||||
#'tempel-complete
|
||||
#'cape-file
|
||||
#'cape-dict))))
|
||||
|
||||
(use-package eglot
|
||||
:custom
|
||||
(eglot-connect-timeout 90)
|
||||
(eglot-autoshutdown t)
|
||||
(eglot-report-progress t)
|
||||
:config
|
||||
(defun eglot-mode ()
|
||||
(eglot-inlay-hints-mode +1)
|
||||
(my/eglot-capf))
|
||||
(setq-default eglot-workspace-configuration
|
||||
'((clojure-lsp (maxCompletions . 300))))
|
||||
(add-to-list 'eglot-server-programs
|
||||
'((clojure-ts-mode clojurec-ts-mode clojurescript-ts-mode)
|
||||
"clojure-lsp"
|
||||
:initializationOptions
|
||||
(:preferences
|
||||
(:includeInlayParameterNameHints
|
||||
"all"
|
||||
:includeInlayParameterNameHintsWhenArgumentMatchesName
|
||||
t
|
||||
:includeInlayFunctionParameterTypeHints
|
||||
t
|
||||
:includeInlayVariableTypeHints
|
||||
t
|
||||
:includeInlayVariableTypeHintsWhenTypeMatchesName
|
||||
t
|
||||
:includeInlayPRopertyDeclarationTypeHints
|
||||
t
|
||||
:includeInlayFunctionLikeReturnTypeHints
|
||||
t
|
||||
:includeInlayEnumMemberValueHints
|
||||
t))))
|
||||
:hook
|
||||
(eglot-managed-mode . eglot-inlay-hints-mode)
|
||||
(eglot-managed-mode . #'my/eglot-capf))
|
||||
|
||||
(use-package consult-eglot
|
||||
:after (consult eglot))
|
||||
|
||||
(use-package tree-sitter
|
||||
:ensure t)
|
||||
|
||||
;;;;; Clojure
|
||||
(use-package clojure-ts-mode
|
||||
:after (tree-sitter cider lispy)
|
||||
:config
|
||||
(require 'sesman)
|
||||
(sesman-install-menu clojure-mode-map)
|
||||
:hook
|
||||
((clojure-ts-mode . eglot-ensure)
|
||||
(clojure-ts-mode . rainbow-delimiters-mode)
|
||||
(clojure-ts-mode . (lambda () (setq-local sesman-system 'CIDER)))
|
||||
(clojure-ts-mode . (lambda () (sesman-install-menu clojure-mode-map)))
|
||||
(clojurec-ts-mode . (lambda () (sesman-install-menu clojurec-mode-map)))
|
||||
(clojurescript-ts-mode . (lambda () (sesman-install-menu clojurescript-mode-map))))
|
||||
:mode (("\\.clj\\'" . clojure-ts-mode)
|
||||
("\\.cljc\\'" . clojurec-ts-mode)
|
||||
("\\.cljs\\'" . clojurescript-ts-mode))
|
||||
:init
|
||||
(add-to-list 'lispy-clojure-modes 'clojure-ts-mode)
|
||||
(add-to-list 'lispy-clojure-modes 'clojurec-ts-mode)
|
||||
(add-to-list 'lispy-clojure-modes 'clojurescript-ts-mode)
|
||||
(add-to-list 'tree-sitter-major-mode-language-alist '(clojure-ts-mode . clojure))
|
||||
(add-to-list 'tree-sitter-major-mode-language-alist '(clojurec-ts-mode . clojure))
|
||||
(add-to-list 'tree-sitter-major-mode-language-alist '(clojurescript-ts-mode . clojure)))
|
||||
|
||||
(use-package cider
|
||||
:hook
|
||||
(clojure-ts-mode . cider-mode)
|
||||
:config
|
||||
(evil-define-key 'insert 'cider-mode-map
|
||||
"C-x C-e" #'cider-eval-last-sexp)
|
||||
(evil-define-key 'normal 'cider-mode-map
|
||||
(kbd "<localleader>ce") #'cider-eval-sexp-at-point))
|
||||
|
||||
;;;;; Chicken Scheme
|
||||
(defun flymake-chicken-init ()
|
||||
(add-hook 'flymake-diagnostic-functions #'flymake-chicken-backend nil t)
|
||||
(flymake-mode))
|
||||
|
||||
(use-package geiser
|
||||
:config
|
||||
(defalias 'run-geiser 'geiser))
|
||||
|
||||
(use-package lsp-scheme
|
||||
:autoload lsp-scheme-chicken
|
||||
:hook
|
||||
(scheme-mode . lsp-scheme)
|
||||
:custom
|
||||
(lsp-scheme-implementation "chicken")
|
||||
:config
|
||||
(progn (add-to-list 'eglot-server-programs '(scheme-mode . ("chicken-lsp-server"))))
|
||||
(require 'lsp-scheme))
|
||||
|
||||
;; (use-package flymake-chicken
|
||||
;; :hook
|
||||
;; ((scheme-mode . flymake-chicken-init)
|
||||
;; (scheme-mode . flymake-mode))
|
||||
;; :custom
|
||||
;; (flycheck-global-modes '(not scheme-mode))
|
||||
;; :config
|
||||
;; (add-hook 'flymake-diagnostic-functions #'flymake-chicken-backend nil t))
|
||||
|
||||
;;;; Other Languages
|
||||
(use-package nix-ts-mode
|
||||
:hook
|
||||
eglot-ensure
|
||||
:mode ("\\.nix\\'" . nix-ts-mode))
|
||||
|
||||
;; (use-package lsp-tailwindcss
|
||||
;; :init
|
||||
;; (setq lsp-tailwindcss-add-on-mode t
|
||||
;; lsp-tailwindcss-experimental-class-regex ["\"([^\"]*)\""])
|
||||
;; :config
|
||||
;; (add-to-list 'lsp-tailwindcss-major-modes 'clojurescript-ts-mode)
|
||||
;; (add-to-list 'lsp-tailwindcss-major-modes 'clojurec-ts-mode))
|
||||
|
||||
(use-package dhall-mode
|
||||
:mode "\\.dhall\'"
|
||||
:hook
|
||||
((dhall-mode . lsp)))
|
||||
|
||||
;;;; Version Control
|
||||
|
||||
;;;;; Git
|
||||
(use-package magit
|
||||
:autoload
|
||||
magit)
|
||||
|
||||
(use-package magit-todos
|
||||
:after magit
|
||||
:hook
|
||||
(magit-mode . magit-todos-mode))
|
||||
|
||||
(use-package forge
|
||||
:after magit
|
||||
:config
|
||||
(advice-add 'magit :after (lambda (&rest _args) (call-interactively #'forge-pull))))
|
||||
|
||||
(use-package code-review
|
||||
:after forge
|
||||
:custom
|
||||
(code-review-auth-login-marker 'forge))
|
||||
|
||||
(use-package git-gutter
|
||||
:hook prog-mode)
|
||||
|
||||
;;;; LaTeX
|
||||
;; https://github.com/politza/pdf-tools/#known-problems
|
||||
(add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer)
|
||||
|
||||
;;;; Communication
|
||||
;;;;; IRC
|
||||
(use-package circe
|
||||
:ensure t
|
||||
:hook
|
||||
(circe-chat-mode . enable-circe-color-nicks)
|
||||
:custom
|
||||
(circe-network-options
|
||||
'(("Lyrion Libera Chat"
|
||||
:host "lyrion.ch"
|
||||
:port 6697
|
||||
:tls t
|
||||
:nick "zilti"
|
||||
:sasl-username "zilti/irc.libera.chat"
|
||||
:sasl-password (lambda (_) (password-store-get "Privat/Soju"))))))
|
||||
|
||||
(provide 'init)
|
||||
;;; init.el ends here
|
||||
(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.
|
||||
'(custom-safe-themes
|
||||
'("75fb82e748f32de807b3f9e8c72de801fdaeeb73c791f405d8f73711d0710856" "0527c20293f587f79fc1544a2472c8171abcc0fa767074a0d3ebac74793ab117" default))
|
||||
'(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'")
|
||||
'(safe-local-variable-values
|
||||
'((eval progn
|
||||
(global-display-fill-column-indicator-mode t)
|
||||
(make-variable-buffer-local 'cider-jack-in-nrepl-middlewares)
|
||||
(add-to-list 'cider-jack-in-nrepl-middlewares "shadow.cljs.devtools.server.nrepl/middleware")))))
|
||||
(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.
|
||||
)
|
19
emacs/templates
Normal file
19
emacs/templates
Normal file
|
@ -0,0 +1,19 @@
|
|||
fundamental-mode
|
||||
|
||||
(sign "-- DZ " (format-time-string "%Y-%m-%d"))
|
||||
|
||||
prog-mode
|
||||
|
||||
(vip-title (if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) " " (make-string (length str) ?=) " " n
|
||||
(if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) " " (s str) " " n
|
||||
(if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) " " (make-string (length str) ?=) " " n)
|
||||
|
||||
(fixme (if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) "FIXME ")
|
||||
(todo (if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) "TODO ")
|
||||
(bug (if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) "BUG ")
|
||||
(hack (if (derived-mode-p 'emacs-lisp-mode) ";; " comment-start) "HACK ")
|
||||
|
||||
;; Local Variables:
|
||||
;; mode: lisp-data
|
||||
;; outline-regexp: "[a-z]"
|
||||
;; End:
|
284
flake.lock
Normal file
284
flake.lock
Normal file
|
@ -0,0 +1,284 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flatpaks": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1699549615,
|
||||
"narHash": "sha256-llttqyX8LwAeL2nxHN97FFEQ3Kf8meyQWxShVKMva54=",
|
||||
"owner": "GermanBread",
|
||||
"repo": "declarative-flatpak",
|
||||
"rev": "9acb7b2dbb47173fc8427e7841d8b1eade2fba66",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "GermanBread",
|
||||
"ref": "stable",
|
||||
"repo": "declarative-flatpak",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1699783872,
|
||||
"narHash": "sha256-4zTwLT2LL45Nmo6iwKB3ls3hWodVP9DiSWxki/oewWE=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "280721186ab75a76537713ec310306f0eba3e407",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "master",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland": {
|
||||
"inputs": {
|
||||
"hyprland-protocols": "hyprland-protocols",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"systems": "systems_2",
|
||||
"wlroots": "wlroots",
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1699893778,
|
||||
"narHash": "sha256-Sq/l7BPoeCMtTFQ/B0qdAmNgrykDMAz8Vv2neZqGJbU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"rev": "5edb4e4a304bbef1de30a36f7b921ea328d7efc6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"ref": "main",
|
||||
"repo": "Hyprland",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-protocols": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1691753796,
|
||||
"narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-filter": {
|
||||
"locked": {
|
||||
"lastModified": 1693833173,
|
||||
"narHash": "sha256-hlMABKrGbEiJD5dwUSfnw1CQ3bG7KKwDV+Nx3bEZd7U=",
|
||||
"owner": "numtide",
|
||||
"repo": "nix-filter",
|
||||
"rev": "ac030bd9ba98e318e1f4c4328d60766ade8ebe8b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "nix-filter",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1697777081,
|
||||
"narHash": "sha256-n2vQARhKevRGyeo+LAa8g+CdUQsdH/caNk8jnylcPhY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "679cadfdfed2b90311a247b2d6ef6dfd3d6cab73",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-23.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1698134075,
|
||||
"narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1699781429,
|
||||
"narHash": "sha256-UYefjidASiLORAjIvVsUHG6WBtRhM67kTjEY4XfZOFs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e44462d6021bfe23dfb24b775cc7c390844f773d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flatpaks": "flatpaks",
|
||||
"home-manager": "home-manager",
|
||||
"hyprland": "hyprland",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"split-monitor-workspaces": "split-monitor-workspaces"
|
||||
}
|
||||
},
|
||||
"split-monitor-workspaces": {
|
||||
"inputs": {
|
||||
"hyprland": [
|
||||
"hyprland"
|
||||
],
|
||||
"nix-filter": "nix-filter"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1698179193,
|
||||
"narHash": "sha256-zDW+72enuRGuLLRbO1+pYk8FgRjQrBGksIAOk88OwOI=",
|
||||
"owner": "Duckonaut",
|
||||
"repo": "split-monitor-workspaces",
|
||||
"rev": "2b1abdbf9e9de9ee660540167c8f51903fa3d959",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Duckonaut",
|
||||
"repo": "split-monitor-workspaces",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1689347949,
|
||||
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default-linux",
|
||||
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default-linux",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"wlroots": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"host": "gitlab.freedesktop.org",
|
||||
"lastModified": 1699292815,
|
||||
"narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=",
|
||||
"owner": "wlroots",
|
||||
"repo": "wlroots",
|
||||
"rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"host": "gitlab.freedesktop.org",
|
||||
"owner": "wlroots",
|
||||
"repo": "wlroots",
|
||||
"rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"xdph": {
|
||||
"inputs": {
|
||||
"hyprland-protocols": [
|
||||
"hyprland",
|
||||
"hyprland-protocols"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1697981233,
|
||||
"narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
57
flake.nix
Normal file
57
flake.nix
Normal file
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
description = "zilti's NixOS";
|
||||
|
||||
nixConfig = {
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
substituters = [
|
||||
"https://cache.nixos.org"
|
||||
];
|
||||
extra-substituters = [
|
||||
"https://cache.nixos.org"
|
||||
"https://hyprland.cachix.org"
|
||||
"https://nix-community.cachix.org"
|
||||
];
|
||||
extra-trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
];
|
||||
};
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/master";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
hyprland = {
|
||||
url = "github:hyprwm/Hyprland/main";
|
||||
};
|
||||
split-monitor-workspaces = {
|
||||
url = "github:Duckonaut/split-monitor-workspaces";
|
||||
inputs.hyprland.follows = "hyprland";
|
||||
};
|
||||
flatpaks.url = "github:GermanBread/declarative-flatpak/stable";
|
||||
};
|
||||
|
||||
outputs = inputs@{ nixpkgs, home-manager, hyprland, split-monitor-workspaces, flatpaks, ... }: {
|
||||
nixosConfigurations = {
|
||||
"ziltis-desktop" = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
#specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
/etc/nixos/configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.zilti = import ./home.nix;
|
||||
home-manager.extraSpecialArgs = inputs;
|
||||
home-manager.sharedModules = [
|
||||
flatpaks.homeManagerModules.default
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
495
home.nix
Normal file
495
home.nix
Normal file
|
@ -0,0 +1,495 @@
|
|||
args@{ config, pkgs, hyprland, split-monitor-workspaces, flatpaks, ... }:
|
||||
|
||||
{
|
||||
home.username = "zilti";
|
||||
home.homeDirectory = "/home/zilti";
|
||||
|
||||
home.packages = with pkgs; [
|
||||
pwvucontrol
|
||||
sysstat
|
||||
lm_sensors
|
||||
pciutils
|
||||
usbutils
|
||||
coreutils-full
|
||||
unzip
|
||||
(nerdfonts.override { fonts = [ "VictorMono" "MPlus" ]; })
|
||||
lagrange
|
||||
stow
|
||||
nixfmt
|
||||
pinentry-qt
|
||||
libsForQt5.ksshaskpass
|
||||
swappy
|
||||
grim
|
||||
slurp
|
||||
hyprpaper
|
||||
gamescope
|
||||
git-cola
|
||||
fossil
|
||||
nil
|
||||
gcc
|
||||
libgccjit
|
||||
chicken
|
||||
clojure
|
||||
clojure-lsp
|
||||
clj-kondo
|
||||
babashka
|
||||
podman-compose
|
||||
sqlite
|
||||
nodejs_20
|
||||
sqlite
|
||||
tofi
|
||||
pinentry-qt
|
||||
wlr-randr
|
||||
nwg-displays
|
||||
libsForQt5.okular
|
||||
libsForQt5.dolphin
|
||||
kteatime
|
||||
discord
|
||||
bitwarden
|
||||
freetube
|
||||
space-cadet-pinball
|
||||
qtpass
|
||||
ungoogled-chromium
|
||||
slack
|
||||
signal-desktop
|
||||
telegram-desktop
|
||||
zoom-us
|
||||
git-filter-repo
|
||||
git-doc
|
||||
# For pharo
|
||||
freetype
|
||||
pixman
|
||||
SDL2
|
||||
libffi
|
||||
libuuid
|
||||
libsForQt5.ksshaskpass
|
||||
perl538Packages.IOSocketSSL
|
||||
perl538Packages.DigestHMAC
|
||||
perl538Packages.TermReadKey
|
||||
perl538Packages.MIMELite
|
||||
perl538Packages.FileLibMagic
|
||||
perl538Packages.IOSocketINET6
|
||||
iconv
|
||||
];
|
||||
|
||||
imports = [ ./hyprland/hyprland.nix ./waybar/settings.nix ./emacs/emacs.nix ];
|
||||
|
||||
home.stateVersion = "23.11";
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
home.sessionPath = [ "${config.home.homeDirectory}/.config/emacs/bin" ];
|
||||
|
||||
home.sessionVariables = {
|
||||
PASSWORD_STORE_DIR =
|
||||
"${config.home.homeDirectory}/.local/share/password-store";
|
||||
SSH_ASKPASS = "${pkgs.libsForQt5.ksshaskpass}/bin/ksshaskpass";
|
||||
};
|
||||
|
||||
home.pointerCursor = {
|
||||
package = pkgs.catppuccin-cursors.lattePeach;
|
||||
gtk.enable = true;
|
||||
x11.enable = true;
|
||||
name = "Catppuccin-Latte-Peach-Cursors";
|
||||
size = 32;
|
||||
};
|
||||
|
||||
accounts = {
|
||||
calendar = {
|
||||
basePath = "${config.home.homeDirectory}/calendars";
|
||||
accounts = {
|
||||
nextcloud = {
|
||||
primary = true;
|
||||
remote = {
|
||||
type = "caldav";
|
||||
url = "https://nextcloud.lyrion.ch/remote.php/dav/calendars/zilti";
|
||||
userName = "dziltener@lyrion.ch";
|
||||
passwordCommand = [ "pass" "Privat/Nextcloud" ];
|
||||
};
|
||||
vdirsyncer = {
|
||||
enable = true;
|
||||
auth = "guess";
|
||||
itemTypes = "caldav";
|
||||
};
|
||||
khal = {
|
||||
enable = true;
|
||||
type = "discover";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
contact = {
|
||||
basePath = "${config.home.homeDirectory}/contacts";
|
||||
accounts = {
|
||||
nextcloud = {
|
||||
remote = {
|
||||
type = "carddav";
|
||||
url =
|
||||
"https://nextcloud.lyrion.ch/rempte.php/dav/addressbooks/users/zilti";
|
||||
userName = "dziltener@lyrion.ch";
|
||||
passwordCommand = [ "pass" "Privat/Nextcloud" ];
|
||||
};
|
||||
vdirsyncer = {
|
||||
enable = false;
|
||||
auth = "digest";
|
||||
};
|
||||
khal = { enable = true; };
|
||||
khard = { enable = true; };
|
||||
};
|
||||
};
|
||||
};
|
||||
email = {
|
||||
accounts = {
|
||||
LMail = {
|
||||
realName = "Daniel Ziltener";
|
||||
userName = "dziltener";
|
||||
passwordCommand = "pass Privat/Mailaccount | head -n 1";
|
||||
primary = true;
|
||||
address = "dziltener@lyrion.ch";
|
||||
imap = {
|
||||
host = "lyrion.ch";
|
||||
tls = {
|
||||
enable = true;
|
||||
useStartTls = true;
|
||||
};
|
||||
};
|
||||
smtp = {
|
||||
host = "lyrion.ch";
|
||||
tls = {
|
||||
enable = true;
|
||||
useStartTls = true;
|
||||
};
|
||||
};
|
||||
thunderbird = { enable = true; };
|
||||
aerc = { enable = true; };
|
||||
};
|
||||
RedSky = {
|
||||
flavor = "gmail.com";
|
||||
realName = "Daniel Ziltener";
|
||||
userName = "dz@redsky.io";
|
||||
passwordCommand = "pass Privat/RedSkyGMail";
|
||||
address = "dz@redsky.io";
|
||||
thunderbird = { enable = true; };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.flatpak = {
|
||||
enableModule = true;
|
||||
remotes = {
|
||||
"flathub" = "https://dl.flathub.org/repo/flathub.flatpakrepo";
|
||||
"flathub-beta" =
|
||||
"https://dl.flathub.org/beta-repo/flathub-beta.flatpakrepo";
|
||||
};
|
||||
packages = [
|
||||
"flathub:app/com.github.tchx84.Flatseal//stable"
|
||||
"flathub:app/com.usebottles.bottles//stable"
|
||||
"flathub:app/com.valvesoftware.Steam//stable"
|
||||
"flathub:app/info.beyondallreason.bar//stable"
|
||||
];
|
||||
};
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
services.plan9port = {
|
||||
fontsrv.enable = true;
|
||||
plumber.enable = true;
|
||||
};
|
||||
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
environment = { };
|
||||
settings = {
|
||||
background_opacity = "0.85";
|
||||
kitty_mod = "ctrl+shift";
|
||||
enabled_layouts = "horizontal";
|
||||
};
|
||||
keybindings = { "kitty_mod+enter" = "new_window"; };
|
||||
font = {
|
||||
name = "VictorMono Nerd Font Mono";
|
||||
size = 10;
|
||||
};
|
||||
theme = "Catppuccin-Frappe";
|
||||
};
|
||||
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
bashrcExtra = ''
|
||||
eval "$(${pkgs.starship}/bin/starship init bash)"
|
||||
'';
|
||||
};
|
||||
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
mouse = true;
|
||||
extraConfig = ''set-option -sa terminal-overrides ",xterm*:Tc"'';
|
||||
};
|
||||
|
||||
# https://github.com/nix-community/nix-direnv
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
programs.starship = let flavour = "frappe";
|
||||
in {
|
||||
enable = true;
|
||||
settings = {
|
||||
aws.disabled = true;
|
||||
gcloud.disabled = true;
|
||||
format = "$all";
|
||||
palette = "catppuccin_${flavour}";
|
||||
} // builtins.fromTOML (builtins.readFile (pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "starship";
|
||||
rev = "5629d2356f62a9f2f8efad3ff37476c19969bd4f";
|
||||
sha256 = "sha256-nsRuxQFKbQkyEI4TXgvAjcroVdG+heKX5Pauq/4Ota0=";
|
||||
} + /palettes/${flavour}.toml));
|
||||
};
|
||||
|
||||
programs.hstr = { enable = true; };
|
||||
|
||||
programs.htop = { enable = true; };
|
||||
|
||||
programs.ripgrep = { enable = true; };
|
||||
|
||||
programs.gpg = { enable = true; };
|
||||
|
||||
# services.gpg-agent = {
|
||||
# enable = true;
|
||||
# pinentryFlavor = "qt";
|
||||
# extraConfig = ''
|
||||
# allow-emacs-pinentry
|
||||
# allow-loopback-pinentry
|
||||
# '';
|
||||
# };
|
||||
|
||||
home.file.gpg-agent-conf = {
|
||||
enable = true;
|
||||
target = ".gnupg/gpg-agent.conf";
|
||||
text = ''
|
||||
grab
|
||||
pinentry-program ${pkgs.pinentry-qt}/bin/pinentry-qt
|
||||
allow-emacs-pinentry
|
||||
allow-loopback-pinentry
|
||||
'';
|
||||
};
|
||||
|
||||
programs.rbw = {
|
||||
enable = true;
|
||||
settings = {
|
||||
base_url = "vaultwarden.lyrion.ch";
|
||||
email = "dziltener@lyrion.ch";
|
||||
pinentry = "qt";
|
||||
};
|
||||
};
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Daniel Ziltener";
|
||||
userEmail = "dziltener@lyrion.ch";
|
||||
signing = {
|
||||
key = "37F655BAF43BC0FF300A91A1B38976E82C9DAE42";
|
||||
signByDefault = true;
|
||||
};
|
||||
diff-so-fancy = { enable = true; };
|
||||
extraConfig = {
|
||||
sendemail = {
|
||||
smtpserver = "lyrion.ch";
|
||||
smtpuser = "dziltener";
|
||||
smtpencryption = "starttls";
|
||||
smtpserverport = 465;
|
||||
};
|
||||
rebase.autoStash = true;
|
||||
pull.rebase = true;
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.git-cliff = {
|
||||
enable = true;
|
||||
# https://git-cliff.org/docs/configuration
|
||||
settings = { };
|
||||
};
|
||||
|
||||
programs.tealdeer = { enable = true; };
|
||||
|
||||
# https://github.com/ianthehenry/sd
|
||||
programs.script-directory = {
|
||||
enable = true;
|
||||
settings = { SD_EDITOR = "vim"; };
|
||||
};
|
||||
|
||||
programs.keychain = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableXsessionIntegration = true;
|
||||
agents = [ "ssh" "gpg" ];
|
||||
keys =
|
||||
[ "id_rsa" "personal_ed" "37F655BAF43BC0FF300A91A1B38976E82C9DAE42" ];
|
||||
};
|
||||
|
||||
programs.password-store = {
|
||||
enable = true;
|
||||
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]);
|
||||
};
|
||||
|
||||
programs.browserpass = { enable = true; };
|
||||
|
||||
services.pueue = { enable = true; };
|
||||
|
||||
services.network-manager-applet.enable = true;
|
||||
|
||||
services.batsignal = { enable = true; };
|
||||
|
||||
# services.fusuma = {
|
||||
# enable = true;
|
||||
# };
|
||||
|
||||
services.copyq = { enable = true; };
|
||||
|
||||
# programs.vdirsyncer = {
|
||||
# enable = true;
|
||||
# };
|
||||
|
||||
services.vdirsyncer = { enable = true; };
|
||||
|
||||
# programs.khal = {
|
||||
# enable = true;
|
||||
# };
|
||||
|
||||
# programs.khard = {
|
||||
# enable = true;
|
||||
# };
|
||||
|
||||
programs.aerc = {
|
||||
enable = true;
|
||||
extraConfig = { general = { unsafe-accounts-conf = true; }; };
|
||||
};
|
||||
|
||||
services.kdeconnect = {
|
||||
enable = true;
|
||||
indicator = true;
|
||||
};
|
||||
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
matchBlocks = {
|
||||
"github.com" = {
|
||||
user = "git";
|
||||
hostname = "github.com";
|
||||
identitiesOnly = true;
|
||||
identityFile = "~/.ssh/personal_ed";
|
||||
};
|
||||
"gitea.lyrion.ch" = {
|
||||
user = "git";
|
||||
hostname = "gitea.lyrion.ch";
|
||||
port = 7920;
|
||||
identitiesOnly = true;
|
||||
identityFile = "~/.ssh/personal_ed";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# services.ssh-agent.enable = true;
|
||||
|
||||
services.nextcloud-client = {
|
||||
enable = true;
|
||||
startInBackground = true;
|
||||
};
|
||||
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
package = "${pkgs.swaylock-effects}";
|
||||
settings = {
|
||||
screenshots = true;
|
||||
clock = true;
|
||||
indicator-idle-visible = true;
|
||||
grace = 3;
|
||||
fade-in = 3;
|
||||
effect-blur = "7x5";
|
||||
effect-vignette = "0.5:0.5";
|
||||
};
|
||||
};
|
||||
|
||||
services.swayidle = {
|
||||
enable = true;
|
||||
events = [ ];
|
||||
timeouts = [{
|
||||
timeout = 600;
|
||||
command = "${pkgs.swaylock-effects}/bin/swaylock";
|
||||
}];
|
||||
};
|
||||
|
||||
services.mako = {
|
||||
enable = true;
|
||||
defaultTimeout = 5000;
|
||||
};
|
||||
|
||||
services.gammastep = {
|
||||
enable = true;
|
||||
provider = "geoclue2";
|
||||
temperature = {
|
||||
day = 5500;
|
||||
night = 2700;
|
||||
};
|
||||
};
|
||||
|
||||
# programs.waybar = {
|
||||
# enable = true;
|
||||
# systemd.enable = true;
|
||||
# style = builtins.readFile ./waybar/style.css;
|
||||
# settings = import ./waybar/settings.nix;
|
||||
# };
|
||||
|
||||
programs.wlogout = { enable = true; };
|
||||
|
||||
programs.fuzzel = {
|
||||
enable = true;
|
||||
settings = {
|
||||
main = {
|
||||
terminal = "${pkgs.kitty}/bin/kitty";
|
||||
width = 100;
|
||||
fields = "filename,name,generic,exec";
|
||||
filter-desktop = false;
|
||||
layer = "overlay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.file.tofi-conf = {
|
||||
enable = true;
|
||||
target = ".config/tofi/config";
|
||||
text = ''
|
||||
drun-launch = true
|
||||
font = Victor Mono Nerd Font
|
||||
font-size = 12
|
||||
text-cursor = true
|
||||
terminal = kitty
|
||||
width = 1200
|
||||
height = 720
|
||||
'' + (builtins.readFile (pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "tofi";
|
||||
rev = "2e74ddba0c582b2ca2d9d06f67f5a902c3a093fb";
|
||||
sha256 = "sha256-XUwixvy2WyfaSRHM8cTnOn8lKv+vbhheDA1Z47ap+Mc=";
|
||||
} + /catppuccin-latte));
|
||||
};
|
||||
|
||||
qt = {
|
||||
enable = true;
|
||||
style.name = "breeze";
|
||||
};
|
||||
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
profiles.default = { isDefault = true; };
|
||||
};
|
||||
|
||||
programs.thunderbird = {
|
||||
enable = true;
|
||||
profiles.default = { isDefault = true; };
|
||||
};
|
||||
}
|
171
hyprland/hyprland.nix
Normal file
171
hyprland/hyprland.nix
Normal file
|
@ -0,0 +1,171 @@
|
|||
{ config, lib, pkgs, hyprland, wayland, split-monitor-workspaces, ... }:
|
||||
|
||||
{
|
||||
|
||||
home.file.hyprland-catppuccino = let flavour = "frappe";
|
||||
in {
|
||||
enable = true;
|
||||
target = ".config/hypr/catppuccino.conf";
|
||||
text = builtins.readFile (pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "hyprland";
|
||||
rev = "99a88fd21fac270bd999d4a26cf0f4a4222c58be";
|
||||
sha256 = "sha256-07B5QmQmsUKYf38oWU3+2C6KO4JvinuTwmW1Pfk8CT8=";
|
||||
} + /themes/${flavour}.conf);
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
package = hyprland.packages.${pkgs.system}.hyprland;
|
||||
plugins = [
|
||||
split-monitor-workspaces.packages.${pkgs.system}.split-monitor-workspaces
|
||||
];
|
||||
settings = {
|
||||
source =
|
||||
[ "~/.config/hypr/monitors.conf" "~/.config/hypr/catppuccino.conf" ];
|
||||
input = {
|
||||
kb_layout = "de";
|
||||
kb_options = "caps:swapescape";
|
||||
follow_mouse = 1;
|
||||
touchpad = { natural_scroll = false; };
|
||||
sensitivity = 0;
|
||||
};
|
||||
general = {
|
||||
gaps_in = 15;
|
||||
gaps_out = 15;
|
||||
border_size = 1;
|
||||
resize_on_border = true;
|
||||
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
|
||||
"col.inactive_border" = "rgba(595959aa)";
|
||||
layout = "master";
|
||||
};
|
||||
misc = {
|
||||
vfr = true;
|
||||
vrr = 1;
|
||||
animate_manual_resizes = true;
|
||||
};
|
||||
decoration = {
|
||||
rounding = 10;
|
||||
drop_shadow = true;
|
||||
shadow_range = 4;
|
||||
shadow_render_power = 3;
|
||||
"col.shadow" = "rgba(1a1a1aee)";
|
||||
blur = { enabled = true; };
|
||||
};
|
||||
animations = {
|
||||
enabled = true;
|
||||
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||
animation = [
|
||||
"windows, 1, 7, myBezier"
|
||||
"windowsOut, 1, 7, default, popin 80%"
|
||||
"border, 1, 10, default"
|
||||
"borderangle, 1, 8, default"
|
||||
"fade, 1, 7, default"
|
||||
"workspaces, 1, 6, default"
|
||||
];
|
||||
};
|
||||
dwindle = {
|
||||
pseudotile = false;
|
||||
preserve_split = true;
|
||||
force_split = 0;
|
||||
default_split_ratio = 1.5;
|
||||
};
|
||||
master = {
|
||||
new_is_master = false;
|
||||
orientation = "center";
|
||||
always_center_master = true;
|
||||
mfact = 0.5;
|
||||
special_scale_factor = 0.8;
|
||||
};
|
||||
gestures = { workspace_swipe = false; };
|
||||
|
||||
"$lockscreen" = "${pkgs.swaylock-effects}/bin/swaylock";
|
||||
"$mainMod" = "SUPER";
|
||||
|
||||
bind = [
|
||||
"$mainMod, Q, exec, ${pkgs.kitty}/bin/kitty"
|
||||
"$mainMod, C, killactive,"
|
||||
#"$mainMod, M, exit,"
|
||||
"$mainMod, M, exec, ${pkgs.wlogout}/bin/wlogout"
|
||||
"$mainMod, E, exec, dolphin"
|
||||
"$mainMod, V, togglefloating,"
|
||||
#"$mainMod, R, exec, ${pkgs.fuzzel}/bin/fuzzel"
|
||||
"$mainMod, R, exec, ${pkgs.tofi}/bin/tofi-drun"
|
||||
"$mainMod, P, pseudo," # dwindle
|
||||
"$mainMod, J, togglesplit," # dwindle
|
||||
"$mainMod, T, togglegroup,"
|
||||
"$mainMod, A, layoutmsg, swapwithmaster master"
|
||||
"$mainMod, I, layoutmsg, orientationcenter"
|
||||
"$mainMod, H, layoutmsg, orientationleft"
|
||||
"$mainMod, L, layoutmsg, orientationright"
|
||||
# Screenshots
|
||||
#"SHIFT, PRINT, exec, hyprshot -m region"
|
||||
''
|
||||
SHIFT, PRINT, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -''
|
||||
"$mainMod SHIFT, L, exec, $lockscreen"
|
||||
# Move focus
|
||||
"$mainMod, left, movefocus, l"
|
||||
"$mainMod, right, movefocus, r"
|
||||
"$mainMod, up, movefocus, u"
|
||||
"$mainMod, down, movefocus, d"
|
||||
|
||||
# Move windows inside a workspace
|
||||
"$mainMod SHIFT, h, movewindoworgroup, l"
|
||||
"$mainMod SHIFT, l, movewindoworgroup, r"
|
||||
|
||||
#Handle tabbed windows
|
||||
"$mainMod, tab, changegroupactive,"
|
||||
"$mainMod SHIFT, T, lockactivegroup, toggle"
|
||||
|
||||
# Switch workspaces
|
||||
"$mainMod, 1, split-workspace, 1"
|
||||
"$mainMod, 2, split-workspace, 2"
|
||||
"$mainMod, 3, split-workspace, 3"
|
||||
"$mainMod, 4, split-workspace, 4"
|
||||
"$mainMod, 5, split-workspace, 5"
|
||||
"$mainMod, 6, split-workspace, 6"
|
||||
"$mainMod, 7, split-workspace, 7"
|
||||
"$mainMod, 8, split-workspace, 8"
|
||||
"$mainMod, 9, split-workspace, 9"
|
||||
# Move windows to workspaces
|
||||
"$mainMod SHIFT, 1, split-movetoworkspace, 1"
|
||||
"$mainMod SHIFT, 2, split-movetoworkspace, 2"
|
||||
"$mainMod SHIFT, 3, split-movetoworkspace, 3"
|
||||
"$mainMod SHIFT, 4, split-movetoworkspace, 4"
|
||||
"$mainMod SHIFT, 5, split-movetoworkspace, 5"
|
||||
"$mainMod SHIFT, 6, split-movetoworkspace, 6"
|
||||
"$mainMod SHIFT, 7, split-movetoworkspace, 7"
|
||||
"$mainMod SHIFT, 8, split-movetoworkspace, 8"
|
||||
"$mainMod SHIFT, 9, split-movetoworkspace, 9"
|
||||
"$mainMod SHIFT, ß, split-movetoworkspace, special"
|
||||
# Scroll through workspaces
|
||||
"$mainMod, mouse_down, workspace, e+1"
|
||||
"$mainMod, mouse_up, workspace, e-1"
|
||||
# Special workspace
|
||||
"SHIFT ALT, RETURN, togglespecialworkspace"
|
||||
];
|
||||
|
||||
# Mouse bindings
|
||||
# 274: Middle mouse button
|
||||
# 275: left near
|
||||
# 276: left far
|
||||
# 277: right near
|
||||
# 278: right far
|
||||
bindm = [
|
||||
"$mainMod, mouse:272, movewindow"
|
||||
"$mainMod, mouse:273, resizewindow"
|
||||
];
|
||||
|
||||
windowrulev2 = [ "tile,class:(pharo)" ];
|
||||
|
||||
# Autostart
|
||||
exec-once = [
|
||||
"[workspace special] ${pkgs.kitty}/bin/kitty"
|
||||
"sleep 1; hyprctl dispatch layoutmsg orientationleft; hyprctl dispatch togglespecialworkspace"
|
||||
"hyprpaper"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
14
iso.nix
Normal file
14
iso.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ config, pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
<nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix>
|
||||
|
||||
# Provide an initial copy of the NixOS channel so that the user
|
||||
# doesn't need to run "nix-channel --update" first.
|
||||
<nixpkgs/nixos/modules/installer/cd-dvd/channel.nix>
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
networkmanager
|
||||
];
|
||||
}
|
103
waybar/settings.nix
Normal file
103
waybar/settings.nix
Normal file
|
@ -0,0 +1,103 @@
|
|||
{ config, lib, pkgs, programs, ... }:
|
||||
|
||||
{
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
style = builtins.readFile ./style.css;
|
||||
settings = {
|
||||
mainBar = {
|
||||
spacing = 4;
|
||||
layer = "top";
|
||||
modules-left = [ "hyprland/workspaces" "wlr/mode" "wlr/scratchpad" "user" ];
|
||||
modules-center = [ "hyprland/window" ];
|
||||
modules-right = [
|
||||
"idle_inhibitor"
|
||||
"network"
|
||||
"cpu"
|
||||
"memory"
|
||||
"temperature"
|
||||
"backlight"
|
||||
"battery"
|
||||
"battery#bat2"
|
||||
"clock"
|
||||
"wireplumber"
|
||||
"tray"
|
||||
];
|
||||
"hyprland/workspaces" = {
|
||||
on-scroll-up = "${pkgs.hyprland}/bin/hyprctl dispatch workspace e+1";
|
||||
on-scroll-down =
|
||||
"${pkgs.hyprland}/bin/hyprctl dispatch workspace e-1";
|
||||
on-click = "activate";
|
||||
format = "{id}: {icon}";
|
||||
};
|
||||
"hyprland/window" = { format = "{}"; };
|
||||
"wlr/mode" = { format = ''<span style="italic">{}</span>''; };
|
||||
"wlr/scratchpad" = {
|
||||
format = "{icon} {count}";
|
||||
show-empty = true;
|
||||
format-icons = [ "" "" ];
|
||||
tooltip = true;
|
||||
tooltip-format = "{app}: {title}";
|
||||
};
|
||||
user = {
|
||||
format = "{user} (up {work_d} days ↑)";
|
||||
interval = 60;
|
||||
icon = true;
|
||||
};
|
||||
idle_inhibitor = {
|
||||
format = "{icon}";
|
||||
format-icons = [ " " " " ];
|
||||
};
|
||||
tray = { spacing = 10; };
|
||||
clock = {
|
||||
format = "{:%H:%M} ";
|
||||
tooltip-format = ''
|
||||
<big>{:%Y %B}</big>
|
||||
<tt><small>{calendar}</small></tt>'';
|
||||
format-alt = "{:%Y-%m-%d} ";
|
||||
};
|
||||
cpu = {
|
||||
format = "{usage}% {icon0} {icon1} {icon2} {icon3} {icon4} {icon5} {icon6} {icon7}";
|
||||
format-icons = [ "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" ];
|
||||
tooltip = false;
|
||||
};
|
||||
memory = { format = "{}% "; };
|
||||
temperature = {
|
||||
critical-threshold = 80;
|
||||
format = "{temperatureC}°C";
|
||||
format-icons = [ "" ];
|
||||
};
|
||||
backlight = {
|
||||
device = "intel_backlight";
|
||||
format = "{percent}% {icon}";
|
||||
format-icons = [ "" "" "" "" "" "" "" "" "" ];
|
||||
};
|
||||
battery = {
|
||||
states = {
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
format = "{capacity}% {icon}";
|
||||
format-icons = [ "" "" "" "" "" ];
|
||||
};
|
||||
"battery#bat2" = { bat = "BAT2"; };
|
||||
network = {
|
||||
format-wifi = "{essid} ({signalStrength}%) ";
|
||||
format-ethernet = "{ipaddr}/{cidr} ";
|
||||
tooltip-format = "{ifname} via {gwaddr} ";
|
||||
format-linked = "{ifname} (No IP) ";
|
||||
format-disconnected = "Disconnected ⚠";
|
||||
format-alt = "{ifname}: {ipaddr}/{cidr}";
|
||||
};
|
||||
wireplumber = {
|
||||
format = "{volume}% {icon}";
|
||||
format-muted = "🔇";
|
||||
on-click = "${pkgs.pwvucontrol}/bin/pwvucontrol";
|
||||
format-icons = [ "" "" "" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
}
|
280
waybar/style.css
Normal file
280
waybar/style.css
Normal file
|
@ -0,0 +1,280 @@
|
|||
* {
|
||||
/* `otf-font-awesome` is required to be installed for icons */
|
||||
font-family: 'MPlus Nerd Font', FontAwesome, Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: rgba(43, 48, 59, 0.5);
|
||||
border-bottom: 3px solid rgba(100, 114, 125, 0.5);
|
||||
color: #ffffff;
|
||||
transition-property: background-color;
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/*
|
||||
window#waybar.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
window#waybar.solo {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
*/
|
||||
|
||||
window#waybar.termite {
|
||||
background-color: #3F3F3F;
|
||||
}
|
||||
|
||||
window#waybar.chromium {
|
||||
background-color: #000000;
|
||||
border: none;
|
||||
}
|
||||
|
||||
button {
|
||||
/* Use box-shadow instead of border so the text isn't offset */
|
||||
box-shadow: inset 0 -3px transparent;
|
||||
/* Avoid rounded borders under each button name */
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
|
||||
button:hover {
|
||||
background: inherit;
|
||||
box-shadow: inset 0 -3px #ffffff;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
background-color: #64727D;
|
||||
box-shadow: inset 0 -3px #ffffff;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: #eb4d4b;
|
||||
}
|
||||
|
||||
#mode {
|
||||
background-color: #64727D;
|
||||
border-bottom: 3px solid #ffffff;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor,
|
||||
#scratchpad,
|
||||
#mpd {
|
||||
padding: 0 10px;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#window,
|
||||
#workspaces {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
/* If workspaces is the leftmost module, omit left margin */
|
||||
.modules-left > widget:first-child > #workspaces {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* If workspaces is the rightmost module, omit right margin */
|
||||
.modules-right > widget:last-child > #workspaces {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#clock {
|
||||
background-color: #64727D;
|
||||
}
|
||||
|
||||
#battery {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
#battery.charging, #battery.plugged {
|
||||
color: #ffffff;
|
||||
background-color: #26A65B;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: #f53c3c;
|
||||
color: #ffffff;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
label:focus {
|
||||
background-color: #000000;
|
||||
}
|
||||
|
||||
#cpu {
|
||||
background-color: #2ecc71;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
#memory {
|
||||
background-color: #9b59b6;
|
||||
}
|
||||
|
||||
#disk {
|
||||
background-color: #964B00;
|
||||
}
|
||||
|
||||
#backlight {
|
||||
background-color: #90b1b1;
|
||||
}
|
||||
|
||||
#network {
|
||||
background-color: #2980b9;
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
background-color: #f53c3c;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
background-color: #f1c40f;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
background-color: #90b1b1;
|
||||
color: #2a5c45;
|
||||
}
|
||||
|
||||
#wireplumber {
|
||||
background-color: #fff0f5;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
#wireplumber.muted {
|
||||
background-color: #f53c3c;
|
||||
}
|
||||
|
||||
#custom-media {
|
||||
background-color: #66cc99;
|
||||
color: #2a5c45;
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
#custom-media.custom-spotify {
|
||||
background-color: #66cc99;
|
||||
}
|
||||
|
||||
#custom-media.custom-vlc {
|
||||
background-color: #ffa000;
|
||||
}
|
||||
|
||||
#temperature {
|
||||
background-color: #f0932b;
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
background-color: #eb4d4b;
|
||||
}
|
||||
|
||||
#tray {
|
||||
background-color: #2980b9;
|
||||
}
|
||||
|
||||
#tray > .passive {
|
||||
-gtk-icon-effect: dim;
|
||||
}
|
||||
|
||||
#tray > .needs-attention {
|
||||
-gtk-icon-effect: highlight;
|
||||
background-color: #eb4d4b;
|
||||
}
|
||||
|
||||
#idle_inhibitor {
|
||||
background-color: #2d3436;
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
background-color: #ecf0f1;
|
||||
color: #2d3436;
|
||||
}
|
||||
|
||||
#mpd {
|
||||
background-color: #66cc99;
|
||||
color: #2a5c45;
|
||||
}
|
||||
|
||||
#mpd.disconnected {
|
||||
background-color: #f53c3c;
|
||||
}
|
||||
|
||||
#mpd.stopped {
|
||||
background-color: #90b1b1;
|
||||
}
|
||||
|
||||
#mpd.paused {
|
||||
background-color: #51a37a;
|
||||
}
|
||||
|
||||
#language {
|
||||
background: #00b093;
|
||||
color: #740864;
|
||||
padding: 0 5px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state {
|
||||
background: #97e1ad;
|
||||
color: #000000;
|
||||
padding: 0 0px;
|
||||
margin: 0 5px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#keyboard-state > label {
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
#keyboard-state > label.locked {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
#scratchpad {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
#scratchpad.empty {
|
||||
background-color: transparent;
|
||||
}
|
Loading…
Reference in a new issue