initial commit (because syncthing)

This commit is contained in:
Maddie H 2023-12-19 19:08:55 +00:00
commit e8613514eb
Signed by: maddie
GPG Key ID: C296DE8C9053683F
188 changed files with 5550 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
result
*/result

15
README.md Normal file
View File

@ -0,0 +1,15 @@
# Maddie's NixFiles
A Nix flake for my system configuration - WIP.
## Structure
- `./maddie` - A folder for my home-manager configs (aka my user)
- `./maddie/macos` - Specifically macOS (darwin) home configuration
- `./maddie/nixos` - Specifically NixOS home configuration
- `./maddie/common` - Home configuration available on all systems
- `./systems` - A folder for my system-wide configs
- `./systems/mmacbookpro/` - System configuration for my MacBook Pro (M.MacBookPro)
- `./systems/mdesktop` - System configuration for my desktop (M.Desktop)
- `overlays.nix` - A file for my nixpkgs overlays
## Many thanks
- ❤️ Thanks to @Minion3665 who helped me make this config

67
flake.lock Normal file
View File

@ -0,0 +1,67 @@
{
"nodes": {
"darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1700795494,
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
"owner": "LnL7",
"repo": "nix-darwin",
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
"type": "github"
},
"original": {
"owner": "LnL7",
"repo": "nix-darwin",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1702110869,
"narHash": "sha256-hgbzPjIMLYJf3Ekq9qZCpDcIZn1BZmOp7d6PMkIWknU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "7db6291d95693374d408f4877c265ec7481f222b",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1701693815,
"narHash": "sha256-7BkrXykVWfkn6+c1EhFA3ko4MLi3gVG0p9G96PNnKTM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "09ec6a0881e1a36c29d67497693a67a16f4da573",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

81
flake.nix Normal file
View File

@ -0,0 +1,81 @@
{
description = "Maddie's Nix configurations";
inputs = {
# Home manager
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
darwin.url = "github:LnL7/nix-darwin";
darwin.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, nixpkgs, home-manager, darwin }:
let
username = "maddie";
utils = import ./utils nixpkgs;
nixpkgs_x86_64 = import nixpkgs {
config.allowUnfree = true;
config.allowUnsupportedSystem = false;
config.allowBroken = false;
config.permittedInsecurePackages = [
"libgcrypt-1.8.10"
"libxls-1.6.2"
];
overlays = import ./overlays.nix;
system = "x86_64-linux";
};
nixpkgs_aarch64_darwin = import nixpkgs {
config.allowUnfree = true;
config.allowUnsupportedSystem = false;
config.allowBroken = false;
overlays = import ./overlays.nix;
system = "aarch64-darwin";
};
nixpkgs_aarch64_linux = import nixpkgs {
config.allowUnfree = true;
config.allowUnsupportedSystem = false;
config.allowBroken = false;
overlays = import ./overlays.nix;
system = "aarch64-linux";
};
in
{
nixosConfigurations."MDesktop" = nixpkgs.lib.nixosSystem
{
specialArgs = { inherit username; };
pkgs = nixpkgs_x86_64;
system = "x86_64-linux";
modules = [
home-manager.nixosModules.home-manager
{
home-manager.users.${username}.imports = utils.nixFilesIn ./maddie/common ++ utils.nixFilesIn ./maddie/nixos;
home-manager.extraSpecialArgs = { inherit username; pkgs = nixpkgs_x86_64; };
}
] ++ utils.nixFilesIn ./systems/mdesktop;
};
darwinConfigurations."MMacBookPro" = darwin.lib.darwinSystem
{
pkgs = nixpkgs_aarch64_darwin;
specialArgs = { inherit username; };
system = "aarch64-darwin";
modules = [
home-manager.darwinModules.home-manager
{
home-manager.useUserPackages = true;
home-manager.users.${username}.imports = utils.nixFilesIn ./maddie/common ++ utils.nixFilesIn ./maddie/macos;
home-manager.extraSpecialArgs = { inherit username; pkgs = nixpkgs_aarch64_darwin; };
}
] ++ utils.nixFilesIn ./systems/mmacbookpro;
};
formatter.x86_64-linux = nixpkgs_x86_64.legacyPackages.x86_64-linux.nixpkgs-fmt;
formatter.aarch64-darwin = nixpkgs_aarch64_darwin.legacyPackages.aarch64-darwin.nixpkgs-fmt;
formatter.aarch64-linux = nixpkgs_aarch64_linux.legacyPackages.aarch64-linux.nixpkgs-fmt;
};
}

View File

@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
amfora
lynx
];
}

12
maddie/common/btop.nix Normal file
View File

@ -0,0 +1,12 @@
{ config, ... }:
{
programs.btop = {
enable = true;
settings = {
color_theme = "TTY";
theme_background = false;
truecolor = true;
};
};
}

7
maddie/common/code.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
go # Go
];
}

8
maddie/common/editor.nix Normal file
View File

@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
# Misc editors
home.packages = with pkgs; [
vis
];
}

18
maddie/common/emacs.nix Normal file
View File

@ -0,0 +1,18 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
tree-sitter
emacs29
];
xdg.configFile."emacs/init.el" = {
source = ./emacs/init.el;
};
xdg.configFile."emacs/early-init.el" = {
source = ./emacs/early-init.el;
};
xdg.configFile."emacs/emacs.png" = {
source = ./emacs/emacs.png;
};
}

View File

@ -0,0 +1 @@
maddie@MMacBookPro.1240

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

238
maddie/common/emacs/init.el Normal file
View File

@ -0,0 +1,238 @@
;; MELPA
(package-initialize)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
;; Evil
(use-package evil
:ensure t
:init
(setq evil-want-keybinding nil)
:config
(evil-set-undo-system 'undo-redo)
(evil-mode 1))
;; Evil collection
(use-package evil-collection
:ensure t
:after evil
:config
(setq evil-collection-mode-list '(dashboard dired))
(evil-collection-init))
;; Dashboard
(use-package dashboard
:ensure t
:init ;; tweak dashboard config before loading it
(setq dashboard-set-heading-icons t)
(setq dashboard-set-file-icons t)
(setq dashboard-banner-logo-title "Welcome back to Emacs, Maddie!")
(setq dashboard-startup-banner 'logo) ;; use standard emacs logo as banner
;;(setq dashboard-startup-banner "~/.config/emacs/emacs.png") ;; use custom image as banner
(setq dashboard-center-content nil) ;; set to 't' for centered content
(setq dashboard-items '((recents . 5)
(agenda . 5 )
(bookmarks . 3)
;; (projects . 3)
(registers . 3)))
:config
(dashboard-setup-startup-hook)
(dashboard-modify-heading-icons '((recents . "file-text")
(bookmarks . "book"))))
;; Command completion
(use-package vertico
:ensure t
:config
(vertico-mode 1))
;; Rust
(use-package rust-mode
:ensure t)
;; Nix
(use-package nix-mode
:ensure t)
;; Git
(use-package magit
:ensure t
:bind (("C-x g" . magit-status)
("C-x C-g" . magit-status)))
;; Markdown mode
(use-package markdown-mode
:ensure t)
;; Treemacs
(use-package treemacs
:ensure t
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display 'simple
treemacs-file-event-delay 2000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-expand-after-init t
treemacs-find-workspace-method 'find-for-file-or-pick-first
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-header-scroll-indicators '(nil . "^^^^^^")
treemacs-hide-dot-git-directory t
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
treemacs-project-follow-into-home nil
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-select-when-already-in-treemacs 'move-back
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-text-scale nil
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-wide-toggle-width 70
treemacs-width 35
treemacs-width-increment 1
treemacs-width-is-initially-locked t
treemacs-workspace-switch-cleanup nil)
(treemacs-resize-icons 22)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
(when treemacs-python-executable
(treemacs-git-commit-diff-mode t))
(treemacs-hide-gitignored-files-mode nil))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t d" . treemacs-select-directory)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package treemacs-evil
:after (treemacs evil)
:ensure t)
;; Keybindings
(use-package general
:ensure t
:config
(general-evil-setup t))
(nvmap :prefix "SPC"
"b b" '(ibuffer :which-key "Ibuffer")
"b c" '(clone-indirect-buffer-other-window :which-key "Clone indirect buffer other window")
"b k" '(kill-current-buffer :which-key "Kill current buffer")
"b n" '(next-buffer :which-key "Next buffer")
"b p" '(previous-buffer :which-key "Previous buffer")
"b B" '(ibuffer-list-buffers :which-key "Ibuffer list buffers")
"b K" '(kill-buffer :which-key "Kill buffer"))
;; Set backup and autosave directories
(setq backup-directory-alist
`(("." . "~/.local/share/emacs/backups")))
(setq auto-save-file-name-transforms
`((".*" "~/.local/share/emacs/auto-save-list/" t)))
;; Disable the bell
(setq visible-bell nil
ring-bell-function #'ignore)
;; Font
(set-face-attribute 'default nil
:font "Iosevka Nerd Font"
:height 150
:weight 'medium)
(add-to-list 'default-frame-alist '(font . "Iosevka Nerd Font-13"))
;; UI
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(column-number-mode 1)
(global-display-line-numbers-mode 1)
(setq display-line-numbers-type 'relative)
(setq inhibit-startup-screen t)
(setq dired-listing-switches "-alh")
;; Editor
(setq scroll-preserve-screen-position nil)
(setq scroll-conservatively 101)
(setq default-tab-width 2)
;; Themes
(use-package gruber-darker-theme
:ensure t)
(use-package atom-one-dark-theme
:ensure t)
(load-theme 'gruber-darker t)
;; Setting garbage collection threshold
(setq gc-cons-threshold 402653184
gc-cons-percentage 0.6)
;; Profile emacs startup
(add-hook 'emacs-startup-hook
(lambda ()
(message "*** Emacs loaded in %s with %d garbage collections."
(format "%.2f seconds"
(float-time
(time-subtract after-init-time before-init-time)))
gcs-done)))
;; Silence compiler warnings as they can be pretty disruptive
(if (boundp 'comp-deferred-compilation)
(setq comp-deferred-compilation nil)
(setq native-comp-deferred-compilation nil))
;; In noninteractive sessions, prioritize non-byte-compiled source files to
;; prevent the use of stale byte-code. Otherwise, it saves us a little IO time
;; to skip the mtime checks on every *.elc file.
(setq load-prefer-newer noninteractive)
(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
'(markdown-mode atom-one-dark-theme treemacs-evil treemacs gruber-darker-theme gruber-darker nix-mode vertico evil evil-collection dashboard general)))
(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.
)

16
maddie/common/esa.nix Normal file
View File

@ -0,0 +1,16 @@
{ config, ... }:
{
programs.eza = {
enable = true;
enableAliases = true;
extraOptions = [
"--group-directories-first"
"--time-style=long-iso"
"--git"
"-h"
"-g"
];
icons = true;
};
}

9
maddie/common/fetch.nix Normal file
View File

@ -0,0 +1,9 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
pridefetch # System stats with pride flags
neofetch # Generic system stats
pfetch # Simple system stats
];
}

51
maddie/common/git.nix Normal file
View File

@ -0,0 +1,51 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
gh
git-review
];
home.file.".local/bin/git-sync" = {
source = ./git/git-sync.sh;
executable = true;
};
programs.git = {
enable = true;
lfs.enable = true;
userName = "Madeleine";
userEmail = "maddie@spyhoodle.me";
signing = {
key = "FA50688B9EB6D8AA070C8241C296DE8C9053683F";
signByDefault = true;
gpgPath = "/run/current-system/sw/bin/gpg";
};
aliases = {
graph = "log --graph --oneline --decorate";
unstage = "reset HEAD --";
co = "checkout";
br = "branch";
ci = "commit";
st = "status";
ps = "push";
};
extraConfig = {
init.defaultBranch = "development";
pull.rebase = "merges";
core.sshCommand = "/run/current-system/sw/bin/ssh";
};
ignores = [
"**/.DS_Store"
"**/._.DS_Store"
".DS_Store"
"._.DS_Store"
"**/*.swp"
"*.swp"
];
};
}

View File

@ -0,0 +1,6 @@
#!/usr/bin/env sh
git add .
git commit -am "$(date -I)"
git pull
git push

21
maddie/common/helix.nix Normal file
View File

@ -0,0 +1,21 @@
{ config, ... }:
{
programs.helix = {
enable = true;
/* languages = [
{
name = "rust";
auto-format = true;
}
]; */
settings = {
theme = "onedark";
keys.normal = {
space.space = "file_picker";
space.w = ":w";
space.q = ":q";
};
};
};
}

19
maddie/common/htop.nix Normal file
View File

@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
programs.htop = {
enable = true;
package = pkgs.htop-vim;
settings = {
hide_kernel_threads = 1;
hide_userland_threads = 1;
highlight_base_name = 1;
show_cpu_usage = 1;
show_cpu_frequency = 1;
show_cpu_temperature = 1;
degree_fahrenheit = 0;
enable_mouse = 1;
tree_view = 1;
};
};
}

7
maddie/common/java.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
jdk8
];
}

77
maddie/common/kakoune.nix Normal file
View File

@ -0,0 +1,77 @@
{ config, pkgs, ... }:
{
programs.kakoune = {
enable = true;
config = {
numberLines = {
enable = true;
relative = true;
};
scrollOff.lines = 3;
showWhitespace.enable = false;
tabStop = 4;
colorScheme = "one-dark";
ui = {
statusLine = "top";
assistant = "cat";
enableMouse = true;
setTitle = true;
};
hooks = [
{
name = "WinSetOption";
option = "filetype=nix";
commands = ''
set-option window indentwidth 2
set-option window formatcmd nixpkgs-fmt
'';
}
];
};
plugins = with pkgs.kakounePlugins; [
kakoune-rainbow
powerline-kak
auto-pairs-kak
pkgs.kak-lsp
];
extraConfig = ''
# Tabs
hook global InsertChar \t %{ exec -draft h@ }
add-highlighter global/ show-whitespaces -tab '' -tabpad ''
# Kak-LSP
eval %sh{kak-lsp --kakoune -s $kak_session}
lsp-enable
# Modeline
declare-option bool lsp_enabled false
declare-option -hidden str lsp_modeline_progress ""
define-command -hidden -params 6 -override lsp-handle-progress %{
set-option global lsp_modeline_progress %sh{
if ! "$6"; then
echo "$2\$\{5:+" ($5%)"}\$\{4:+": $4"}"
fi
}
}
declare-option -hidden str modeline_git_branch
hook global WinDisplay .* %{
set-option window modeline_git_branch %sh{
branch=$(git -C "\$\{kak_buffile%/*}" rev-parse --abbrev-ref HEAD 2>/dev/null)
if [ -n "$branch" ]; then
printf "$branch "
fi
}
}
set-option global modelinefmt '%opt{lsp_modeline_progress} {StatusLine}{string}%opt{modeline_git_branch}{type}%sh{ [ -n "$kak_opt_filetype" ] && echo "$kak_opt_filetype " }{default}%val{bufname}{{context_info}}{default} {{mode_info}} {meta}%val{cursor_line}:%val{cursor_char_column}'
'';
};
xdg.configFile."kak/colors" = {
source = ./kakoune/colors;
recursive = true;
};
}

View File

@ -0,0 +1,93 @@
# CODE
set-face global value yellow
set-face global type yellow
set-face global variable red
set-face global module yellow
set-face global function blue
set-face global string green
set-face global keyword magenta
set-face global operator white
set-face global attribute cyan
set-face global comment white+d
set-face global documentation white+d
set-face global meta cyan
set-face global builtin yellow
# MARKUP
set-face global title yellow
set-face global header green
set-face global mono cyan
set-face global block magenta
set-face global link blue
set-face global bullet yellow
set-face global list white
# BUILTIN
set-face global Default white
set-face global PrimarySelection black,blue
set-face global SecondarySelection black,green
set-face global PrimaryCursor black,white
set-face global SecondaryCursor black,cyan
set-face global PrimaryCursorEol black,red
set-face global SecondaryCursorEol black,red
set-face global LineNumbers white
set-face global LineNumberCursor yellow
set-face global LineNumbersWrapped black
set-face global MenuForeground blue
set-face global MenuBackground default
set-face global MenuInfo green
set-face global Information default
set-face global Error red
set-face global StatusLine default
set-face global StatusLineMode yellow
set-face global StatusLineInfo blue
set-face global StatusLineValue white
set-face global StatusCursor black,blue
set-face global Prompt blue
set-face global MatchingChar +bu
set-face global BufferPadding black
set-face global Whitespace white+d
# PLUGINS
# kak-lsp
set-face global InlayHint +d@type
set-face global parameter +i@variable
set-face global enum cyan
set-face global InlayDiagnosticError red
set-face global InlayDiagnosticWarning yellow
set-face global InlayDiagnosticInfo blue
set-face global InlayDiagnosticHint white
set-face global LineFlagError red
set-face global LineFlagWarning yellow
set-face global LineFlagInfo blue
set-face global LineFlagHint white
set-face global DiagnosticError +u
set-face global DiagnosticWarning +u
set-face global DiagnosticInfo +u
set-face global DiagnosticHint +u
# Infobox faces
set-face global InfoDefault Information
set-face global InfoBlock block
set-face global InfoBlockQuote block
set-face global InfoBullet bullet
set-face global InfoHeader header
set-face global InfoLink link
set-face global InfoLinkMono header
set-face global InfoMono mono
set-face global InfoRule comment
set-face global InfoDiagnosticError InlayDiagnosticError
set-face global InfoDiagnosticHint InlayDiagnosticHint
set-face global InfoDiagnosticInformation InlayDiagnosticInfo
set-face global InfoDiagnosticWarning InlayDiagnosticWarning
# kak-rainbower
try %{ set-option global rainbow_colors yellow magenta blue }
# For backwards compatibility
define-command -override -hidden one-enable-fancy-underlines %{
echo -debug "one-enable-fancy-underlines is deprecated - curly underlines are enabled by default"
}

View File

@ -0,0 +1,117 @@
# One Dark
declare-option str fg "abb2bf"
declare-option str bg "282c34"
declare-option str subbg "373c47"
declare-option str lightred "e06c75"
declare-option str darkred "be5046"
declare-option str green "98c379"
declare-option str lightorange "e5c07b"
declare-option str darkorange "d19a66"
declare-option str blue "61afef"
declare-option str magenta "c678dd"
declare-option str cyan "56b6c2"
declare-option str comment "5c6370"
declare-option str hint "ffffff"
declare-option str cursoralpha "80"
declare-option str selectionalpha "40"
# Menus do not support transparency, so we must hardcode the selection + sub bg colors
declare-option str menuselection "405770"
# CODE
set-face global value "rgb:%opt{darkorange}"
set-face global type "rgb:%opt{lightorange}"
set-face global variable "rgb:%opt{lightred}"
set-face global module "rgb:%opt{lightorange}"
set-face global function "rgb:%opt{blue}"
set-face global string "rgb:%opt{green}"
set-face global keyword "rgb:%opt{magenta}"
set-face global operator "rgb:%opt{fg}"
set-face global attribute "rgb:%opt{cyan}"
set-face global comment "rgb:%opt{comment}"
set-face global documentation "rgb:%opt{comment}"
set-face global meta "rgb:%opt{cyan}"
set-face global builtin "rgb:%opt{lightorange}"
# MARKUP
set-face global title "rgb:%opt{darkorange}"
set-face global header "rgb:%opt{green}"
set-face global mono "rgb:%opt{cyan}"
set-face global block "rgb:%opt{magenta}"
set-face global link "rgb:%opt{blue}"
set-face global bullet "rgb:%opt{lightorange}"
set-face global list "rgb:%opt{fg}"
# BUILTIN
set-face global Default "rgb:%opt{fg},rgb:%opt{bg}"
set-face global PrimarySelection "default,rgba:%opt{blue}%opt{selectionalpha}"
set-face global SecondarySelection "default,rgba:%opt{green}%opt{selectionalpha}"
set-face global PrimaryCursor "default,rgba:%opt{blue}%opt{cursoralpha}"
set-face global SecondaryCursor "default,rgba:%opt{green}%opt{cursoralpha}"
set-face global PrimaryCursorEol "default,rgba:%opt{lightred}%opt{cursoralpha}"
set-face global SecondaryCursorEol "default,rgba:%opt{darkorange}%opt{cursoralpha}"
set-face global LineNumbers "rgb:%opt{comment}"
set-face global LineNumberCursor "rgb:%opt{darkorange}"
set-face global LineNumbersWrapped "rgb:%opt{bg},rgb:%opt{bg}"
set-face global MenuForeground "rgb:%opt{fg},rgb:%opt{menuselection}"
set-face global MenuBackground "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global MenuInfo "rgb:%opt{green}"
set-face global Information "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global Error "rgb:%opt{lightred}"
set-face global StatusLine "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global StatusLineMode "rgb:%opt{darkorange}"
set-face global StatusLineInfo "rgb:%opt{blue}"
set-face global StatusLineValue "rgb:%opt{fg}"
set-face global StatusCursor "default,rgba:%opt{blue}%opt{cursoralpha}"
set-face global Prompt "rgb:%opt{blue}"
set-face global MatchingChar "default,rgb:%opt{subbg}"
set-face global BufferPadding "rgb:%opt{bg},rgb:%opt{bg}"
set-face global Whitespace "rgb:%opt{comment}"
# PLUGINS
# kak-lsp
set-face global InlayHint "+d@type"
set-face global parameter "+i@variable"
set-face global enum "rgb:%opt{cyan}"
set-face global InlayDiagnosticError "rgb:%opt{lightred}"
set-face global InlayDiagnosticWarning "rgb:%opt{lightorange}"
set-face global InlayDiagnosticInfo "rgb:%opt{blue}"
set-face global InlayDiagnosticHint "rgb:%opt{hint}"
set-face global LineFlagError "rgb:%opt{lightred}"
set-face global LineFlagWarning "rgb:%opt{lightorange}"
set-face global LineFlagInfo "rgb:%opt{blue}"
set-face global LineFlagHint "rgb:%opt{hint}"
set-face global DiagnosticError ",,rgb:%opt{lightred}+c"
set-face global DiagnosticWarning ",,rgb:%opt{lightorange}+c"
set-face global DiagnosticInfo ",,rgb:%opt{blue}+c"
set-face global DiagnosticHint ",,rgb:%opt{hint}+u"
# Infobox faces
set-face global InfoDefault Information
set-face global InfoBlock block
set-face global InfoBlockQuote block
set-face global InfoBullet bullet
set-face global InfoHeader header
set-face global InfoLink link
set-face global InfoLinkMono header
set-face global InfoMono mono
set-face global InfoRule comment
set-face global InfoDiagnosticError InlayDiagnosticError
set-face global InfoDiagnosticHint InlayDiagnosticHint
set-face global InfoDiagnosticInformation InlayDiagnosticInfo
set-face global InfoDiagnosticWarning InlayDiagnosticWarning
# kak-rainbower
try %{ set-option global rainbow_colors "rgb:%opt{lightorange}" "rgb:%opt{magenta}" "rgb:%opt{blue}" }
# For backwards compatibility
define-command -override -hidden one-enable-fancy-underlines %{
echo -debug "one-enable-fancy-underlines is deprecated - curly underlines are enabled by default"
}

View File

@ -0,0 +1,101 @@
# CODE
set-face global value yellow
set-face global type yellow
set-face global variable white
set-face global module yellow
set-face global function blue
set-face global string green
set-face global keyword magenta
set-face global operator red
set-face global attribute cyan
set-face global comment white+d
set-face global documentation white+d
set-face global meta cyan
set-face global builtin yellow
# MARKUP
set-face global title yellow
set-face global header green
set-face global mono cyan
set-face global block magenta
set-face global link blue
set-face global bullet yellow
set-face global list white
# BUILTIN
set-face global Default white
set-face global PrimarySelection black,blue
set-face global SecondarySelection black,green
set-face global PrimaryCursor black,white
set-face global SecondaryCursor black,cyan
set-face global PrimaryCursorEol black,red
set-face global SecondaryCursorEol black,red
set-face global LineNumbers white
set-face global LineNumberCursor yellow
set-face global LineNumbersWrapped black
set-face global MenuForeground blue
set-face global MenuBackground default
set-face global MenuInfo green
set-face global Information default
set-face global Error red
set-face global StatusLine default
set-face global StatusLineMode yellow
set-face global StatusLineInfo blue
set-face global StatusLineValue white
set-face global StatusCursor black,blue
set-face global Prompt blue
set-face global MatchingChar +bu
set-face global BufferPadding black
set-face global Whitespace white+d
# PLUGINS
# kak-lsp
set-face global InlayHint +d@type
set-face global parameter +i@variable
set-face global enum cyan
set-face global InlayDiagnosticError red
set-face global InlayDiagnosticWarning yellow
set-face global InlayDiagnosticInfo blue
set-face global InlayDiagnosticHint white
set-face global LineFlagError red
set-face global LineFlagWarning yellow
set-face global LineFlagInfo blue
set-face global LineFlagHint white
set-face global DiagnosticError +u
set-face global DiagnosticWarning +u
set-face global DiagnosticInfo +u
set-face global DiagnosticHint +u
# Infobox faces
set-face global InfoDefault Information
set-face global InfoBlock block
set-face global InfoBlockQuote block
set-face global InfoBullet bullet
set-face global InfoHeader header
set-face global InfoLink link
set-face global InfoLinkMono header
set-face global InfoMono mono
set-face global InfoRule comment
set-face global InfoDiagnosticError InlayDiagnosticError
set-face global InfoDiagnosticHint InlayDiagnosticHint
set-face global InfoDiagnosticInformation InlayDiagnosticInfo
set-face global InfoDiagnosticWarning InlayDiagnosticWarning
# kak-rainbower
try %{ set-option global rainbow_colors yellow magenta blue }
# For backwards compatibility
define-command -override -hidden one-enable-fancy-underlines %{
echo -debug "one-enable-fancy-underlines is deprecated - curly underlines are enabled by default"
}
# Hardcoded selection + bg colors
# set-face global PrimarySelection default,rgb:2a3f53
# set-face global SecondarySelection default,rgb:384435
# set-face global PrimaryCursor default,rgb:3c6487
# set-face global SecondaryCursor default,rgb:586e4c
# set-face global PrimaryCursorEol default,rgb:7c434a
# set-face global SecondaryCursorEol default,rgb:7c434a

View File

@ -0,0 +1,125 @@
# One Darker
# This theme is a personalized implementation of One Dark.
# Changes include:
# - Darker background color
# - Variables are white instead of red
# - Operators are red instead of white
# - Comments are more visible
# COLORS
declare-option str fg "abb2bf"
declare-option str bg "181a1f"
declare-option str subbg "272b33"
declare-option str lightred "e06c75"
declare-option str darkred "be5046"
declare-option str green "98c379"
declare-option str lightorange "e5c07b"
declare-option str darkorange "d19a66"
declare-option str blue "61afef"
declare-option str magenta "c678dd"
declare-option str cyan "56b6c2"
declare-option str comment "70798a"
declare-option str hint "ffffff"
declare-option str cursoralpha "80"
declare-option str selectionalpha "40"
# Menus do not support transparency, so we must hardcode the selection + sub bg colors
declare-option str menuselection "344b61"
# CODE
set-face global value "rgb:%opt{darkorange}"
set-face global type "rgb:%opt{lightorange}"
set-face global variable "rgb:%opt{fg}"
set-face global module "rgb:%opt{lightorange}"
set-face global function "rgb:%opt{blue}"
set-face global string "rgb:%opt{green}"
set-face global keyword "rgb:%opt{magenta}"
set-face global operator "rgb:%opt{lightred}"
set-face global attribute "rgb:%opt{cyan}"
set-face global comment "rgb:%opt{comment}"
set-face global documentation "rgb:%opt{comment}"
set-face global meta "rgb:%opt{cyan}"
set-face global builtin "rgb:%opt{lightorange}"
# MARKUP
set-face global title "rgb:%opt{darkorange}"
set-face global header "rgb:%opt{green}"
set-face global mono "rgb:%opt{cyan}"
set-face global block "rgb:%opt{magenta}"
set-face global link "rgb:%opt{blue}"
set-face global bullet "rgb:%opt{lightorange}"
set-face global list "rgb:%opt{fg}"
# BUILTIN
set-face global Default "rgb:%opt{fg},rgb:%opt{bg}"
set-face global PrimarySelection "default,rgba:%opt{blue}%opt{selectionalpha}"
set-face global SecondarySelection "default,rgba:%opt{green}%opt{selectionalpha}"
set-face global PrimaryCursor "default,rgba:%opt{blue}%opt{cursoralpha}"
set-face global SecondaryCursor "default,rgba:%opt{green}%opt{cursoralpha}"
set-face global PrimaryCursorEol "default,rgba:%opt{lightred}%opt{cursoralpha}"
set-face global SecondaryCursorEol "default,rgba:%opt{darkorange}%opt{cursoralpha}"
set-face global LineNumbers "rgb:%opt{comment}"
set-face global LineNumberCursor "rgb:%opt{darkorange}"
set-face global LineNumbersWrapped "rgb:%opt{bg},rgb:%opt{bg}"
set-face global MenuForeground "rgb:%opt{fg},rgb:%opt{menuselection}"
set-face global MenuBackground "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global MenuInfo "rgb:%opt{green}"
set-face global Information "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global Error "rgb:%opt{lightred}"
set-face global StatusLine "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global StatusLineMode "rgb:%opt{darkorange}"
set-face global StatusLineInfo "rgb:%opt{blue}"
set-face global StatusLineValue "rgb:%opt{fg}"
set-face global StatusCursor "default,rgba:%opt{blue}%opt{cursoralpha}"
set-face global Prompt "rgb:%opt{blue}"
set-face global MatchingChar "default,rgb:%opt{subbg}"
set-face global BufferPadding "rgb:%opt{bg},rgb:%opt{bg}"
set-face global Whitespace "rgb:%opt{comment}"
# PLUGINS
# kak-lsp
set-face global InlayHint "+d@type"
set-face global parameter "+i@variable"
set-face global enum "rgb:%opt{cyan}"
set-face global InlayDiagnosticError "rgb:%opt{lightred}"
set-face global InlayDiagnosticWarning "rgb:%opt{lightorange}"
set-face global InlayDiagnosticInfo "rgb:%opt{blue}"
set-face global InlayDiagnosticHint "rgb:%opt{hint}"
set-face global LineFlagError "rgb:%opt{lightred}"
set-face global LineFlagWarning "rgb:%opt{lightorange}"
set-face global LineFlagInfo "rgb:%opt{blue}"
set-face global LineFlagHint "rgb:%opt{hint}"
set-face global DiagnosticError ",,rgb:%opt{lightred}+c"
set-face global DiagnosticWarning ",,rgb:%opt{lightorange}+c"
set-face global DiagnosticInfo ",,rgb:%opt{blue}+c"
set-face global DiagnosticHint ",,rgb:%opt{hint}+u"
# Infobox faces
set-face global InfoDefault Information
set-face global InfoBlock block
set-face global InfoBlockQuote block
set-face global InfoBullet bullet
set-face global InfoHeader header
set-face global InfoLink link
set-face global InfoLinkMono header
set-face global InfoMono mono
set-face global InfoRule comment
set-face global InfoDiagnosticError InlayDiagnosticError
set-face global InfoDiagnosticHint InlayDiagnosticHint
set-face global InfoDiagnosticInformation InlayDiagnosticInfo
set-face global InfoDiagnosticWarning InlayDiagnosticWarning
# kak-rainbower
try %{ set-option global rainbow_colors "rgb:%opt{lightorange}" "rgb:%opt{magenta}" "rgb:%opt{blue}" }
# For backwards compatibility
define-command -override -hidden one-enable-fancy-underlines %{
echo -debug "one-enable-fancy-underlines is deprecated - curly underlines are enabled by default"
}

View File

@ -0,0 +1,93 @@
# CODE
set-face global value yellow
set-face global type yellow
set-face global variable red
set-face global module yellow
set-face global function blue
set-face global string green
set-face global keyword magenta
set-face global operator black
set-face global attribute cyan
set-face global comment black+d
set-face global documentation black+d
set-face global meta cyan
set-face global builtin yellow
# MARKUP
set-face global title yellow
set-face global header green
set-face global mono cyan
set-face global block magenta
set-face global link blue
set-face global bullet yellow
set-face global list white
# BUILTIN
set-face global Default black
set-face global PrimarySelection black,blue
set-face global SecondarySelection black,green
set-face global PrimaryCursor black,white
set-face global SecondaryCursor black,cyan
set-face global PrimaryCursorEol black,red
set-face global SecondaryCursorEol black,red
set-face global LineNumbers black
set-face global LineNumberCursor yellow
set-face global LineNumbersWrapped white
set-face global MenuForeground blue
set-face global MenuBackground default
set-face global MenuInfo green
set-face global Information default
set-face global Error red
set-face global StatusLine default
set-face global StatusLineMode yellow
set-face global StatusLineInfo blue
set-face global StatusLineValue white
set-face global StatusCursor black,blue
set-face global Prompt blue
set-face global MatchingChar +bu
set-face global BufferPadding white
set-face global Whitespace black+d
# PLUGINS
# kak-lsp
set-face global InlayHint +d@type
set-face global parameter +i@variable
set-face global enum cyan
set-face global InlayDiagnosticError red
set-face global InlayDiagnosticWarning yellow
set-face global InlayDiagnosticInfo blue
set-face global InlayDiagnosticHint white
set-face global LineFlagError red
set-face global LineFlagWarning yellow
set-face global LineFlagInfo blue
set-face global LineFlagHint white
set-face global DiagnosticError +u
set-face global DiagnosticWarning +u
set-face global DiagnosticInfo +u
set-face global DiagnosticHint +u
# Infobox faces
set-face global InfoDefault Information
set-face global InfoBlock block
set-face global InfoBlockQuote block
set-face global InfoBullet bullet
set-face global InfoHeader header
set-face global InfoLink link
set-face global InfoLinkMono header
set-face global InfoMono mono
set-face global InfoRule comment
set-face global InfoDiagnosticError InlayDiagnosticError
set-face global InfoDiagnosticHint InlayDiagnosticHint
set-face global InfoDiagnosticInformation InlayDiagnosticInfo
set-face global InfoDiagnosticWarning InlayDiagnosticWarning
# kak-rainbower
try %{ set-option global rainbow_colors yellow magenta blue }
# For backwards compatibility
define-command -override -hidden one-enable-fancy-underlines %{
echo -debug "one-enable-fancy-underlines is deprecated - curly underlines are enabled by default"
}

View File

@ -0,0 +1,117 @@
# One Light
declare-option str fg "4b4c54"
declare-option str bg "fafafa"
declare-option str subbg "e6e6e6"
declare-option str lightred "e45649"
declare-option str darkred "ca1243"
declare-option str green "50a14f"
declare-option str lightorange "c18401"
declare-option str darkorange "986801"
declare-option str blue "4078f2"
declare-option str magenta "a626a4"
declare-option str cyan "0184bc"
declare-option str comment "a0a1a7"
declare-option str hint "000000"
declare-option str cursoralpha "80"
declare-option str selectionalpha "40"
# Menus do not support transparency, so we must hardcode the selection + sub bg colors
declare-option str menuselection "bbc9e8"
# CODE
set-face global value "rgb:%opt{darkorange}"
set-face global type "rgb:%opt{lightorange}"
set-face global variable "rgb:%opt{lightred}"
set-face global module "rgb:%opt{lightorange}"
set-face global function "rgb:%opt{blue}"
set-face global string "rgb:%opt{green}"
set-face global keyword "rgb:%opt{magenta}"
set-face global operator "rgb:%opt{fg}"
set-face global attribute "rgb:%opt{cyan}"
set-face global comment "rgb:%opt{comment}"
set-face global documentation "rgb:%opt{comment}"
set-face global meta "rgb:%opt{cyan}"
set-face global builtin "rgb:%opt{lightorange}"
# MARKUP
set-face global title "rgb:%opt{darkorange}"
set-face global header "rgb:%opt{green}"
set-face global mono "rgb:%opt{cyan}"
set-face global block "rgb:%opt{magenta}"
set-face global link "rgb:%opt{blue}"
set-face global bullet "rgb:%opt{lightorange}"
set-face global list "rgb:%opt{fg}"
# BUILTIN
set-face global Default "rgb:%opt{fg},rgb:%opt{bg}"
set-face global PrimarySelection "default,rgba:%opt{blue}%opt{selectionalpha}"
set-face global SecondarySelection "default,rgba:%opt{green}%opt{selectionalpha}"
set-face global PrimaryCursor "default,rgba:%opt{blue}%opt{cursoralpha}"
set-face global SecondaryCursor "default,rgba:%opt{green}%opt{cursoralpha}"
set-face global PrimaryCursorEol "default,rgba:%opt{lightred}%opt{cursoralpha}"
set-face global SecondaryCursorEol "default,rgba:%opt{darkorange}%opt{cursoralpha}"
set-face global LineNumbers "rgb:%opt{comment}"
set-face global LineNumberCursor "rgb:%opt{darkorange}"
set-face global LineNumbersWrapped "rgb:%opt{bg},rgb:%opt{bg}"
set-face global MenuForeground "rgb:%opt{fg},rgb:%opt{menuselection}"
set-face global MenuBackground "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global MenuInfo "rgb:%opt{green}"
set-face global Information "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global Error "rgb:%opt{lightred}"
set-face global StatusLine "rgb:%opt{fg},rgb:%opt{subbg}"
set-face global StatusLineMode "rgb:%opt{darkorange}"
set-face global StatusLineInfo "rgb:%opt{blue}"
set-face global StatusLineValue "rgb:%opt{fg}"
set-face global StatusCursor "default,rgba:%opt{blue}%opt{cursoralpha}"
set-face global Prompt "rgb:%opt{blue}"
set-face global MatchingChar "default,rgb:%opt{subbg}"
set-face global BufferPadding "rgb:%opt{bg},rgb:%opt{bg}"
set-face global Whitespace "rgb:%opt{comment}"
# PLUGINS
# kak-lsp
set-face global InlayHint "+d@type"
set-face global parameter "+i@variable"
set-face global enum "rgb:%opt{cyan}"
set-face global InlayDiagnosticError "rgb:%opt{lightred}"
set-face global InlayDiagnosticWarning "rgb:%opt{lightorange}"
set-face global InlayDiagnosticInfo "rgb:%opt{blue}"
set-face global InlayDiagnosticHint "rgb:%opt{hint}"
set-face global LineFlagError "rgb:%opt{lightred}"
set-face global LineFlagWarning "rgb:%opt{lightorange}"
set-face global LineFlagInfo "rgb:%opt{blue}"
set-face global LineFlagHint "rgb:%opt{hint}"
set-face global DiagnosticError ",,rgb:%opt{lightred}+c"
set-face global DiagnosticWarning ",,rgb:%opt{lightorange}+c"
set-face global DiagnosticInfo ",,rgb:%opt{blue}+c"
set-face global DiagnosticHint ",,rgb:%opt{hint}+u"
# Infobox faces
set-face global InfoDefault Information
set-face global InfoBlock block
set-face global InfoBlockQuote block
set-face global InfoBullet bullet
set-face global InfoHeader header
set-face global InfoLink link
set-face global InfoLinkMono header
set-face global InfoMono mono
set-face global InfoRule comment
set-face global InfoDiagnosticError InlayDiagnosticError
set-face global InfoDiagnosticHint InlayDiagnosticHint
set-face global InfoDiagnosticInformation InlayDiagnosticInfo
set-face global InfoDiagnosticWarning InlayDiagnosticWarning
# kak-rainbower
try %{ set-option global rainbow_colors "rgb:%opt{lightorange}" "rgb:%opt{magenta}" "rgb:%opt{blue}" }
# For backwards compatibility
define-command -override -hidden one-enable-fancy-underlines %{
echo -debug "one-enable-fancy-underlines is deprecated - curly underlines are enabled by default"
}

8
maddie/common/latex.nix Normal file
View File

@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
#texliveFull
texlive.combined.scheme-full
];
}

26
maddie/common/lf.nix Normal file
View File

@ -0,0 +1,26 @@
{ config, pkgs, ... }:
{
programs.lf = {
enable = true;
previewer.source = ./lf/scope;
settings = {
relativenumber = true;
number = true;
hidden = false;
preview = true;
icons = true;
};
};
xdg.configFile = {
"lf/icons" = {
source = ./lf/icons;
};
};
home.packages = with pkgs; [
ueberzug
file
];
}

93
maddie/common/lf/icons Normal file
View File

@ -0,0 +1,93 @@
di 
fi 
tw 
ow 
ln 
or 
ex 
*.txt 
*.mom 
*.me 
*.ms 
*.avif 
*.png 
*.webp 
*.ico 
*.gif 
*.tif 
*.tiff 
*.jpg 
*.jpe 
*.jpeg 
*.heif 
*.svg 
*.xcf 
*.gpg 
*.pdf 
*.djvu 
*.epub 
*.csv 
*.xlsx 
*.tex 
*.md 
*.mp3 
*.opus 
*.ogg 
*.m4a 
*.flac 
*.wav 
*.mkv 
*.mp4 
*.webm 
*.mpeg 
*.avi 
*.mov 
*.mpg 
*.wmv 
*.m4b 
*.flv 
*.zip 
*.rar 
*.7z 
*.tar 
*.gz 
*.z64 󰺷
*.v64 󰺷
*.n64 󰺷
*.gdi 󰺷
*.gba 󱎓
*.nes 󰺶
*.exe 
*.1 
*.nfo 
*.info 
*.log 
*.iso 
*.img 
*.bib 
*.part 󰋮
*.torrent 
*.gitignore 
*.jar 
*.java 
*.r 
*.R 
*.rmd 
*.Rmd 
*.m 
*.rs 
*.go 
*.c 
*.cpp 
*.h 
*.py 
*.js 
*.json 
*.ts 󰛦
*.sh 
*.html 
*.css 
*.xml 
*.php 
*.nix 
*.vim 

52
maddie/common/lf/scope Normal file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env sh
# File preview handler for lf.
set -C -f
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
image() {
if [ -f "$1" ] && [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1; then
printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2-1))" "$(($3-1))" "$1" > "$FIFO_UEBERZUG"
else
mediainfo "$6"
fi
}
ifub() {
[ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1
}
# Note that the cache file name is a function of file information, meaning if
# an image appears in multiple places across the machine, it will not have to
# be regenerated once seen.
case "$(file --dereference --brief --mime-type -- "$1")" in
image/avif) CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
[ ! -f "$CACHE" ] && convert "$1" "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1" ;;
image/*) image "$1" "$2" "$3" "$4" "$5" "$1" ;;
text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
text/troff) man ./ "$1" | col -b ;;
text/* | */xml | application/json) bat --terminal-width "$(($4-2))" -f "$1" ;;
audio/* | application/octet-stream) mediainfo "$1" || exit 1 ;;
video/* )
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
[ ! -f "$CACHE" ] && ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0
image "$CACHE" "$2" "$3" "$4" "$5" "$1"
;;
*/pdf)
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
[ ! -f "$CACHE.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
;;
*/epub+zip|*/mobi*)
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | cut -d' ' -f1)"
[ ! -f "$CACHE.jpg" ] && gnome-epub-thumbnailer "$1" "$CACHE.jpg"
image "$CACHE.jpg" "$2" "$3" "$4" "$5" "$1"
;;
application/*zip) atool --list -- "$1" ;;
*opendocument*) odt2txt "$1" ;;
application/pgp-encrypted) gpg -d -- "$1" ;;
esac
exit 1

14
maddie/common/lsp.nix Normal file
View File

@ -0,0 +1,14 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
nodejs
sumneko-lua-language-server
nodePackages.bash-language-server
nodePackages.vim-language-server
nodePackages.pyright
/* rust-analyzer */
rnix-lsp
universal-ctags
];
}

9
maddie/common/media.nix Normal file
View File

@ -0,0 +1,9 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
imagemagick # Manipulates images
libheif # Manage .heif files from phones
ffmpeg # Video manipulator
];
}

12
maddie/common/mommy.nix Normal file
View File

@ -0,0 +1,12 @@
{ config, ... }:
{
programs.zsh.initExtra = ''
precmd() { [ $? -ne 0 ] && $HOME/.local/bin/mommy -n }
'';
home.file.".local/bin/mommy" = {
source = ./mommy/shell-mommy.sh;
executable = true;
};
}

View File

@ -0,0 +1,77 @@
#!/usr/bin/env sh
usage() { printf "usage: $0 [-pn]\n -p: positive response\n -n: negative response\n"; }
[ $# -eq 0 ] && usage && exit 0;
[ -z "$MOMMYS_LITTLE" ] && MOMMYS_LITTLE="girl"
[ -z "$MOMMYS_PRONOUN" ] && MOMMYS_PRONOUN="her"
[ -z "$MOMMYS_ROLE" ] && MOMMYS_ROLE="mommy"
[ -z "$MOMMY_COLOR" ] && MOMMY_COLOR='\e[38;5;217m'
COLOR_RESET='\e[0m'
negative() {
RESPONSES=(
"do you need $MOMMYS_ROLE's help~? ❤️"
"don't give up, my love~ ❤️"
"don't worry, $MOMMYS_ROLE is here to help you~ ❤️"
"I believe in you, my sweet $MOMMYS_LITTLE~ ❤️"
"it's okay to make mistakes, my dear~ ❤️"
"just a little further, sweetie~ ❤️"
"let's try again together, okay~? ❤️"
"$MOMMYS_ROLE believes in you, and knows you can overcome this~ ❤️"
"$MOMMYS_ROLE believes in you~ ❤️"
"$MOMMYS_ROLE is always here for you, no matter what~ ❤️"
"$MOMMYS_ROLE is here to help you through it~ ❤️"
"$MOMMYS_ROLE is proud of you for trying, no matter what the outcome~ ❤️"
"$MOMMYS_ROLE knows it's tough, but you can do it~ ❤️"
"$MOMMYS_ROLE knows $MOMMYS_PRONOUN little $MOMMYS_LITTLE can do better~ ❤️"
"$MOMMYS_ROLE knows you can do it, even if it's tough~ ❤️"
"$MOMMYS_ROLE knows you're feeling down, but you'll get through it~ ❤️"
"$MOMMYS_ROLE knows you're trying your best~ ❤️"
"$MOMMYS_ROLE loves you, and is here to support you~ ❤️"
"$MOMMYS_ROLE still loves you no matter what~ ❤️"
"you're doing your best, and that's all that matters to $MOMMYS_ROLE~ ❤️"
"$MOMMYS_ROLE is always here to encourage you~ ❤️"
)
}
positive() {
RESPONSES=(
"*pats your head*"
"awe, what a good $MOMMYS_LITTLE~\n$MOMMYS_ROLE knew you could do it~ ❤️"
"good $MOMMYS_LITTLE~\n$MOMMYS_ROLE's so proud of you~ ❤️"
"keep up the good work, my love~ ❤️"
"$MOMMYS_ROLE is proud of the progress you've made~ ❤️"
"$MOMMYS_ROLE is so grateful to have you as $MOMMYS_PRONOUN little $MOMMYS_LITTLE~ ❤️"
"I'm so proud of you, my love~ ❤️"
"$MOMMYS_ROLE is so proud of you~ ❤️"
"$MOMMYS_ROLE loves seeing $MOMMYS_PRONOUN little $MOMMYS_LITTLE succeed~ ❤️"
"$MOMMYS_ROLE thinks $MOMMYS_PRONOUN little $MOMMYS_LITTLE earned a big hug~ ❤️"
"that's a good $MOMMYS_LITTLE~ ❤️"
"you did an amazing job, my dear~ ❤️"
"you're such a smart cookie~ ❤️"
)
}
mommy_says() {
says=$1
printf "$MOMMY_COLOR$says$COLOR_RESET\n"
}
random() {
[ $1 == "positive" ] && positive
[ $1 == "negative" ] && negative
index=$(($RANDOM % ${#RESPONSES[@]}))
response="${RESPONSES[$index]}"
mommy_says "$response"
}
while getopts "pn" options; do
case $options in
p) random "positive" ;;
n) random "negative" ;;
*) usage; exit 1 ;;
esac
done

13
maddie/common/neovim.nix Normal file
View File

@ -0,0 +1,13 @@
{ config, pkgs, lib, ... }:
{
programs.neovim = {
enable = true;
defaultEditor = true;
};
xdg.configFile."nvim" = {
source = ./neovim;
recursive = true;
};
}

1
maddie/common/neovim/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
plugin

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 SpyHoodle
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,22 @@
# Maddie's NeoVim config
A clean, fast, feature-rich IDE layer for my needs in [NeoVim](https://neovim.io/).<br>
Written in Lua, designed for NeoVim v0.7.0 or higher.
## Some highlights
- Written entirely in Lua, making it clean and modern for NeoVim
- Uses [impatient.nvim](https://github.com/lewis6991/impatient.nvim) which greatly improves startup performance
- Uses the latest NeoVim LSP features & tree-sitter for highlighting
- Neat, small and structured files that are easy to read with some commenting
- Helpful features for programming such as highlighting indents & whitespaces
- Features for writing prose and taking notes, such as [vimwiki](https://github.com/vimwiki/vimwiki) and [orgmode](https://github.com/nvim-orgmode/orgmode)
- Extensible Lua written NeoVim specific package manager from [packer.nvim](https://github.com/wbthomason/packer.nvim)
- Modern standard Lua plugins such as [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) and [nvim-tree](https://github.com/kyazdani42/nvim-tree.lua)
- Fixed scrolling in terminals like st with patches and smooth scrolling
- Extra configuration for [Neovide](https://github.com/neovide/neovide), a graphical NeoVim client
- Shortcuts for tabs & splits with the leader key as space
- System clipboard, mouse and scrolling support
## Work in progress!
I'm constantly updating and changing this configuration, by adding new plugins and settings.<br>
I likely won't make changes to make the config more acceptable and general to the public.<br>
Made with ❤️ and 🏳️‍⚧️.

View File

@ -0,0 +1,253 @@
-- Basic vim config
require('basics')
require('keymaps')
require('colours')
-- Packages
return require('packer').startup(function(use)
-- Neovim package manager
use 'wbthomason/packer.nvim'
-- Atom's One Dark theme
use 'navarasu/onedark.nvim'
-- Gruvbox theme
use 'ellisonleao/gruvbox.nvim'
-- VSCode theme
use 'Mofiqul/vscode.nvim'
-- Everforest theme
use 'sainnhe/everforest'
-- Smooth scrolling
use 'psliwka/vim-smoothie'
-- Comments in any language
use 'tpope/vim-commentary'
-- Surrounding
use 'tpope/vim-surround'
-- Repeating
use 'tpope/vim-repeat'
-- Vim-wiki
use 'vimwiki/vimwiki'
-- Rainbow brackets
use 'p00f/nvim-ts-rainbow'
-- Git bindings
use 'tpope/vim-fugitive'
-- Latex
use 'lervag/vimtex'
-- Easy alignment
use 'junegunn/vim-easy-align'
-- Transparent background
use {
'xiyaowong/nvim-transparent',
config = function()
vim.g.transparent_enabled = false
end
}
-- Zen mode
use {
"folke/zen-mode.nvim",
config = function()
require('zen-mode').setup()
end
}
-- Autosaving
use {
'pocco81/auto-save.nvim',
config = function()
require('auto-save').setup({
enabled = true,
execution_message = {
message = function()
return ('>w< autosaved at ' .. vim.fn.strftime('%H:%M:%S'))
end,
cleaning_interval = 1250
},
trigger_events = { 'InsertLeave', 'TextChanged' }
})
end
}
-- Git signs
use {
'lewis6991/gitsigns.nvim',
config = function()
require('gitsigns').setup()
end
}
-- Github Copilot
use {
'zbirenbaum/copilot.lua',
event = { 'VimEnter' },
config = function()
vim.defer_fn(function()
require('copilot').setup()
end, 100)
end
}
-- Liveshare
use {
'jbyuki/instant.nvim',
config = function()
vim.g.instant_username = "Maddie"
end
}
-- Fuzzy finder
use {
'nvim-telescope/telescope.nvim',
requires = { 'nvim-lua/plenary.nvim' }
}
-- Auto-pairs
use {
'windwp/nvim-autopairs',
config = function()
require('nvim-autopairs').setup()
end
}
-- Highlight whitespaces
use {
'ntpeters/vim-better-whitespace',
config = function()
vim.g.better_whitespace_filetypes_blacklist = { 'startify' }
end
}
-- Highlight indents
use {
'nathanaelkane/vim-indent-guides',
config = function()
vim.g.indent_guides_enable_on_vim_startup = 1
vim.g.indent_guides_exclude_filetypes = { 'help', 'NvimTree', 'startify' }
end
}
-- Color hex codes
use {
'norcalli/nvim-colorizer.lua',
config = function()
require('colorizer').setup()
end
}
-- Statusbar line
use {
'nvim-lualine/lualine.nvim',
requires = { 'kyazdani42/nvim-web-devicons', opt = true },
config = function()
require('lualine').setup()
end
}
-- File browser
use {
'kyazdani42/nvim-tree.lua',
requires = { 'kyazdani42/nvim-web-devicons' },
config = function()
require('nvim-tree').setup()
end
}
-- Org-mode
use {
'nvim-orgmode/orgmode',
config = function()
require('orgmode').setup()
require('orgmode').setup_ts_grammar()
end
}
-- Speedup neovim startup
use {
'lewis6991/impatient.nvim',
config = function()
require('impatient')
end
}
-- Rust tools
use 'neovim/nvim-lspconfig'
use {
'simrat39/rust-tools.nvim',
config = function()
require('rust-tools').setup()
end
}
-- -- Language Server Protocol
-- use {
-- 'neovim/nvim-lspconfig',
-- config = function()
-- require('lspconfig').pyright.setup{}
-- require('lspconfig').rnix.setup{}
-- require('lspconfig').bashls.setup{}
-- require('lspconfig').vimls.setup{}
-- require('lspconfig').sumneko_lua.setup {
-- settings = {
-- Lua = {
-- diagnostics = {
-- globals = { 'vim' }
-- }
-- }
-- }
-- }
-- end
-- }
-- Code completion
use 'L3MON4D3/LuaSnip'
use 'rafamadriz/friendly-snippets'
use 'zbirenbaum/copilot-cmp'
use 'hrsh7th/cmp-nvim-lsp'
use 'hrsh7th/cmp-nvim-lua'
use 'hrsh7th/cmp-buffer'
use 'hrsh7th/cmp-path'
use 'hrsh7th/cmp-cmdline'
use {
'hrsh7th/nvim-cmp',
requires = { 'kyazdani42/nvim-web-devicons' },
config = function()
require('plugins.cmp')
end
}
-- Treesitter for highlighting
use {
'nvim-treesitter/nvim-treesitter',
config = function()
require('nvim-treesitter.configs').setup {
ensure_installed = { 'cpp', 'lua', 'go', 'rust', 'python', 'nix', 'vim', 'markdown', 'html', 'css' },
sync_install = true,
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
rainbow = {
enable = true,
extended_mode = true
},
indent = {
enable = true;
}
}
end
}
end)

View File

@ -0,0 +1,36 @@
-- Vim settings
vim.g.mapleader = ' '
vim.o.encoding = 'utf8'
vim.o.background = 'dark'
vim.o.relativenumber = true
vim.o.number = true
vim.o.wrap = false
vim.o.expandtab = true
vim.o.incsearch = true
vim.o.scrolloff = 5
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.cursorline = true
vim.o.ignorecase = true
vim.o.swapfile = false
vim.o.undofile = true
vim.o.splitbelow = true
vim.o.splitright = true
vim.o.errorbells = false
vim.o.termguicolors = true
vim.o.showmode = false
vim.o.showtabline = 1
vim.o.signcolumn = 'auto'
vim.o.clipboard = 'unnamedplus'
vim.o.mouse = 'a'
vim.o.go = 'a'
-- Netrw
vim.g["netrw_banner"] = 0
vim.g["netrw_liststyle"] = 3
vim.g["netrw_winsize"] = 25
-- Neovide
vim.o.guifont = 'JetBrainsMono Nerd Font:h12'
vim.g.neovide_cursor_vfx_mode = 'railgun'
vim.g.neovide_remember_window_size = true

View File

@ -0,0 +1 @@
vim.cmd([[colorscheme onedark]])

View File

@ -0,0 +1,59 @@
-- Neat variables
local opts = { noremap = true, silent = true }
local term_opts = { silent = true }
local keymap = vim.api.nvim_set_keymap
-- Custom/special keymaps
keymap('n', '<leader>c', ':sp<CR> :term<CR> :resize 20N<CR> i', term_opts)
keymap('n', '<leader>r', ':luafile %<CR>:PackerSync<CR>', term_opts)
keymap('n', '<leader>h', ':nohl<CR>', term_opts)
keymap('n', '<leader>z', ':ZenMode<CR>:set wrap<CR>:set linebreak<CR>', term_opts)
keymap('n', '<leader>Z', ':ZenMode<CR>:set nowrap<CR>:set nolinebreak<CR>', term_opts)
keymap('n', '<C-c>', ':Telescope colorscheme<CR>', term_opts)
keymap('n', '<C-q>', ':wqa<CR>', term_opts)
keymap('n', '<C-s>', ':w<CR>', term_opts)
keymap('n', 'U', ':redo<CR>', term_opts)
-- Window management
keymap('n', '<leader>vs', ':vs<CR>', opts)
keymap('n', '<leader>hs', ':sp<CR>', opts)
keymap('n', '<leader>tn', ':tabnew<CR>', opts)
keymap('n', '<leader>th', ':tabprev<CR>', opts)
keymap('n', '<leader>tj', ':tabprev<CR>', opts)
keymap('n', '<leader>tk', ':tabnext<CR>', opts)
keymap('n', '<leader>tl', ':tabnext<CR>', opts)
keymap('n', '<leader>to', ':tabo<CR>', opts)
keymap('n', '<leader>tc', ':tabc<CR>', opts)
-- Window navigation
keymap('n', '<C-Tab>', '<C-w>w', opts)
keymap('n', '<C-h>', '<C-w>h', opts)
keymap('n', '<C-j>', '<C-w>j', opts)
keymap('n', '<C-k>', '<C-w>k', opts)
keymap('n', '<C-l>', '<C-w>l', opts)
-- Buffer navigation
keymap('n', '<S-l>', ':bnext<CR>', opts)
keymap('n', '<S-h>', ':bprevious<CR>', opts)
-- Stay in visual mode when indenting
keymap('v', '<', '<gv', opts)
keymap('v', '>', '>gv', opts)
-- When moving up or down, move physical lines not file lines
keymap('n', 'j', 'gj', opts)
keymap('n', 'k', 'gk', opts)
-- NvimTree
keymap('n', '<C-n>', ':NvimTreeToggle<CR>', term_opts)
-- Telescope
keymap('n', '<C-f>', '<cmd>lua require("telescope.builtin").find_files()<CR>', opts)
keymap('n', '<leader>ff', '<cmd>lua require("telescope.builtin").find_files()<CR>', opts)
keymap('n', '<leader>fg', '<cmd>lua require("telescope.builtin").live_grep()<CR>', opts)
keymap('n', '<leader>fb', '<cmd>lua require("telescope.builtin").buffers()<CR>', opts)
keymap('n', '<leader>fh', '<cmd>lua require("telescope.builtin").help_tags()<CR>', opts)
-- Easy alignment
keymap('n', 'ga', ':EasyAlign', opts)
keymap('v', 'ga', ':EasyAlign', opts)

View File

@ -0,0 +1,117 @@
local cmp = require('cmp')
local luasnip = require('luasnip')
require('luasnip.loaders.from_vscode').lazy_load()
local check_backspace = function()
local col = vim.fn.col "." - 1
return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
end
local kind_icons = {
Text = "",
Method = "m",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "",
Event = "",
Operator = "",
TypeParameter = "",
}
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = {
["<C-k>"] = cmp.mapping.select_prev_item(),
["<C-j>"] = cmp.mapping.select_next_item(),
["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
["<C-y>"] = cmp.config.disable,
["<C-e>"] = cmp.mapping {
i = cmp.mapping.abort(),
c = cmp.mapping.close(),
},
["<CR>"] = cmp.mapping.confirm { select = true },
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expandable() then
luasnip.expand()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif check_backspace() then
fallback()
else
fallback()
end
end, {
"i",
"s",
}),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, {
"i",
"s",
}),
},
formatting = {
fields = { "kind", "abbr", "menu" },
format = function(entry, vim_item)
vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
vim_item.menu = ({
nvim_lsp = "[LSP]",
nvim_lua = "[NVIM_LUA]",
copilot = "[Copilot]",
luasnip = "[Snippet]",
buffer = "[Buffer]",
path = "[Path]",
})[entry.source.name]
return vim_item
end,
},
sources = {
{ name = "nvim_lsp" },
{ name = "nvim_lua" },
{ name = "copilot" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
},
confirm_opts = {
behavior = cmp.ConfirmBehavior.Replace,
select = false,
},
experimental = {
ghost_text = false,
native_menu = false,
},
cmp.config.window.bordered()
}

View File

@ -0,0 +1,6 @@
macOS
JS
add evelyne
evelyne
camhs
Vernova

Binary file not shown.

View File

@ -0,0 +1,19 @@
{ config, ...}:
{
programs.newsboat = {
enable = true;
urls = [
{
title = "Gitea - Evelyne";
tags = [ "git" ];
url = "https://git.spyhoodle.me/evelyne.rss";
}
{
title = "Gitea - Maddie";
tags = [ "git" ];
url = "https://git.spyhoodle.me/maddie.rss";
}
];
};
}

View File

@ -0,0 +1,14 @@
{ config, ... }:
{
programs.password-store = {
enable = true;
settings = {
PASSWORD_STORE_DIR = "${config.xdg.dataHome}/password-store";
};
};
home.sessionVariables = {
PASSWORD_STORE_DIR = "${config.xdg.dataHome}/password-store";
};
}

View File

@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
xorg.xkill # Kill X11 programs with mouse
killall # Kill programs
];
}

24
maddie/common/python.nix Normal file
View File

@ -0,0 +1,24 @@
{ config, pkgs, ... }:
let
packages = ps: with ps; [
numpy
matplotlib
tkinter
pillow
psycopg
passlib
pyotp
aiosmtplib
argon2_cffi
python-dotenv
python-lsp-server
openrgb-python
pdftotext
];
in
{
home.packages = [
(pkgs.python311.withPackages packages)
];
}

15
maddie/common/rust.nix Normal file
View File

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
rustup
];
home = {
sessionVariables = {
CARGO_HOME = "${config.xdg.dataHome}/cargo";
RUSTUP_HOME = "${config.xdg.dataHome}/rustup";
};
sessionPath = [ "${config.home.sessionVariables.CARGO_HOME}/bin" ];
};
}

62
maddie/common/shell.nix Normal file
View File

@ -0,0 +1,62 @@
{ config, ... }:
{
home = {
# Aliases
shellAliases = {
# Core Programs
cp = "cp -iv";
mv = "mv -iv";
rm = "rm -vI";
mkd = "mkdir -pv";
c = "clear";
e = "exit";
# CLI Shortcuts
v = "nvim";
vi = "nvim";
ka = "killall";
xw = "xwallpaper";
nf = "neofetch";
tf = "pridefetch -f trans";
pf = "pfetch";
i = "inertia";
# System shortcuts
heif-convert-dir = "for file in *.heic; do heif-convert -q 100 $file \${file/%.heic/.jpg}; done";
unfuck-wifi = "doas systemctl restart wpa_supplicant.service";
search = "f=$(fzf) && cd \"$f\" 2>/dev/null || xdg-open \"$f\" >/dev/null 2>&1";
cdt = "cd $(mktemp -d)";
sx = "startx ~/.xprofile";
sdn = "doas shutdown -h now";
kys = "kill $(pidof '$@')";
# Nix system shortucts
nix-system-update = "nix flake update $NIXFILES && doas nixos-rebuild switch --flake $NIXFILES";
# For colour
btop = "btop --utf-force";
grep = "grep --color=auto";
diff = "diff --color=auto";
};
# Environment variables
sessionVariables = {
# Locale
LANG = "en_GB.UTF-8";
LC_ALL = "en_GB.UTF-8";
# Define nixfiles location
NIXFILES = "$HOME/Development/Personal/NixFiles";
# Java windows
_JAVA_AWT_WM_NONREPARENTING = 1;
};
# Default $PATH
sessionPath = [
# Add ~/.local/bin to $PATH
"$HOME/.local/bin"
];
};
}

View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
home-assistant-cli
];
}

26
maddie/common/ssh.nix Normal file
View File

@ -0,0 +1,26 @@
{ config, pkgs, username, ... }:
{
# SSH
programs.ssh = {
enable = true;
matchBlocks = {
lambda = {
identityFile = "~/.ssh/id_ed25519_sk";
hostname = "home.spyhoodle.me";
user = "maddie";
};
pinea = {
identityFile = "~/.ssh/id_ed25519_sk";
hostname = "ssh.pinea.dev";
user = "maddie";
};
clicks = {
identityFile = "~/.ssh/clickscodes";
hostname = "git.clicks.codes";
port = 29418;
user = "maddie";
};
};
};
}

View File

@ -0,0 +1,3 @@
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA1jTkcMhBQQoYqNVLofrNnTbB8RCyzSYmdsnPeoOineAAAABHNzaDo= spy@luna (yubikey)
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBO9WsQUnglNetqekCoA6WT0wYNxpUVyNxuktPOHJPBCLJmU9P+YErE915vj4HlYcuOW9UhVajQzLQTcelgs/O8w= M.iPad (Termius)
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBD44bc9OdsIxwNBkdIN5Ce+Wer2gWi+QRcFdOV7+ScIo1QS29wkQJxU90ItcKwqiv+oTBlipV2NSH/YroBSHhQI= M.iPad (Secure ShellFish)

10
maddie/common/tmux.nix Normal file
View File

@ -0,0 +1,10 @@
{ config, ... }:
{
programs.tmux = {
enable = true;
clock24 = true;
mouse = true;
terminal = "screen-256color";
};
}

21
maddie/common/xdg.nix Normal file
View File

@ -0,0 +1,21 @@
{ config, ... }:
{
home = {
sessionVariables = {
# Force use of XDG Dir Spec
CUDA_CACHE_PATH = "${config.xdg.cacheHome}/nv";
LESSHISTFILE = "${config.xdg.configHome}/less/history";
LESSKEY = "${config.xdg.configHome}/less/keys";
WINEPREFIX = "${config.xdg.dataHome}/wine";
_JAVA_OPTIONS = "-Djava.util.prefs.userRoot=${config.xdg.configHome}/java";
};
shellAliases = {
# Force use of XDG Dir Spec
wget = "wget --hsts-file='${config.xdg.dataHome}/wget-hsts'";
rxrdb = "xrdb -load '${config.xdg.configHome}/.config/X11/xresources'";
nvidia-settings = "nvidia-settings --config='${config.xdg.configHome}'/nvidia/settings";
};
};
}

13
maddie/common/yt-dlp.nix Normal file
View File

@ -0,0 +1,13 @@
{ config, pkgs, ... }:
{
programs.yt-dlp.enable = true;
home.packages = with pkgs; [
flac
];
home.file.".local/bin/ytdlp-music" = {
source = ./yt-dlp/ytdlp-music.sh;
executable = true;
};
}

View File

@ -0,0 +1,25 @@
#!/usr/bin/env sh
printf "YT URL: " && read url
printf "Title: " && read title
printf "Artist: " && read artist
printf "Album: " && read album
# Download file from youtube
yt-dlp -x --no-playlist --embed-thumbnail --no-embed-metadata --audio-quality 0 --audio-format flac -o "$title.flac" "$url"
# Set metadata flags
metaflac --set-tag="TITLE=$title" --set-tag="ARTIST=$artist" --set-tag="ALBUM=$album" "$title.flac"
# Export thumbnail
metaflac --export-picture-to="$title.png" "$title.flac"
# Convert png to jpg
mogrify -format jpg "$title.png"
rm -rf "$title.png"
# Convert to square
convert "$title.jpg" -gravity center -crop 1:1 "$title.jpg"
# Move the files to the correct directory
mv "$title.flac" "$title.jpg" $HOME/Music/Library/Liked

123
maddie/common/zsh.nix Normal file
View File

@ -0,0 +1,123 @@
{ config, pkgs, lib, ... }:
{
programs.zsh = {
# Use the zsh shell
enable = true;
# Basic config settings
enableAutosuggestions = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
autocd = true;
/* defaultKeymap = "vicmd"; */
dotDir = ".config/zsh";
history = {
size = 9999999;
expireDuplicatesFirst = true;
extended = true;
path = "${config.xdg.cacheHome}/zsh/history";
};
# Zsh init extras
initExtra = ''
# Disable Ctrl-S to freeze terminal
stty stop undef
# Tab completion
zstyle ':completion:*' menu select # Use a menu
_comp_options+=(globdots) # Include hidden files
# Change cursor shape for different vi modes
export KEYTIMEOUT=1
function zle-keymap-select () {
case $KEYMAP in
vicmd) echo -ne '\e[1 q';; # block
viins|main) echo -ne '\e[5 q';; # beam
esac
}
zle -N zle-keymap-select
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
'';
};
programs.starship = {
# Use the starship prompt
enable = true;
enableZshIntegration = true;
settings = {
format = lib.concatStrings [
# Directory
"$directory"
# VCS
"$git_branch"
"$git_commit"
"$git_state"
"$git_metrics"
"$git_status"
"$hg_branch"
# Languages
"$package"
"$c"
"$rust"
"$golang"
"$haskell"
"$python"
"$java"
"$kotlin"
"$lua"
"$dart"
"$nim"
"$nodejs"
"$swift"
"$zig"
"$nix_shell"
"$conda"
"$spack"
# Prompt line
"$line_break"
"$username"
"$hostname"
"$localip"
"$cmd_duration"
"$memory_usage"
"$jobs"
"$character"
];
# Prompt character
character = {
success_symbol = "-> [λ](bold purple)";
error_symbol = "-> [λ](bold red)";
vimcmd_symbol = "-> [λ](bold green)";
};
# When in a deep directory or git repo
directory.truncation_symbol = ".../";
# Git widgets
git_metrics.disabled = false;
git_status = {
ahead = "->";
behind = "<-";
diverged = "<->";
renamed = ">>";
deleted = "x";
};
# Enable other starship widgets
memory_usage.disabled = false;
localip.disabled = false;
};
};
}

10
maddie/macos/home.nix Normal file
View File

@ -0,0 +1,10 @@
{ config, username, pkgs, lib, ... }:
{
programs.home-manager.enable = true;
home = {
inherit username;
homeDirectory = lib.mkForce "/Users/${username}";
stateVersion = "23.05";
};
}

510
maddie/macos/iterm2.nix Normal file
View File

@ -0,0 +1,510 @@
{ config, username, ... }:
{
targets.darwin.defaults."com.googlecode.iterm2" = {
"PreventEscapeSequenceFromClearingHistory" = 0;
"NoSyncHaveExplainedHowToAddTouchbarControls" = 1;
"NoSyncTipsDisabled" = 1;
"SoundForEsc" = 0;
"VisualIndicatorForEsc" = 0;
"Custom Color Presets" = {
"One Dark" = {
"Ansi 0 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.168627455830574";
"Color Space" = "sRGB";
"Green Component" = "0.1450980454683304";
"Red Component" = "0.1294117718935013";
};
"Ansi 1 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4588235318660736";
"Color Space" = "sRGB";
"Green Component" = "0.4235294163227081";
"Red Component" = "0.8784313797950745";
};
"Ansi 10 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4745098054409027";
"Color Space" = "sRGB";
"Green Component" = "0.7647058963775635";
"Red Component" = "0.5960784554481506";
};
"Ansi 11 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4823529422283173";
"Color Space" = "sRGB";
"Green Component" = "0.7529411911964417";
"Red Component" = "0.8980392217636108";
};
"Ansi 12 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.9372549057006836";
"Color Space" = "sRGB";
"Green Component" = "0.686274528503418";
"Red Component" = "0.3803921639919281";
};
"Ansi 13 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.8666666746139526";
"Color Space" = "sRGB";
"Green Component" = "0.4705882370471954";
"Red Component" = "0.7764706015586853";
};
"Ansi 14 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7607843279838562";
"Color Space" = "sRGB";
"Green Component" = "0.7137255072593689";
"Red Component" = "0.3372549116611481";
};
"Ansi 15 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Ansi 2 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4745098054409027";
"Color Space" = "sRGB";
"Green Component" = "0.7647058963775635";
"Red Component" = "0.5960784554481506";
};
"Ansi 3 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4823529422283173";
"Color Space" = "sRGB";
"Green Component" = "0.7529411911964417";
"Red Component" = "0.8980392217636108";
};
"Ansi 4 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.9372549057006836";
"Color Space" = "sRGB";
"Green Component" = "0.686274528503418";
"Red Component" = "0.3803921639919281";
};
"Ansi 5 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.8666666746139526";
"Color Space" = "sRGB";
"Green Component" = "0.4705882370471954";
"Red Component" = "0.7764706015586853";
};
"Ansi 6 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7607843279838562";
"Color Space" = "sRGB";
"Green Component" = "0.7137255072593689";
"Red Component" = "0.3372549116611481";
};
"Ansi 7 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Ansi 8 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4627451002597809";
"Color Space" = "sRGB";
"Green Component" = "0.4627451002597809";
"Red Component" = "0.4627451002597809";
};
"Ansi 9 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4588235318660736";
"Color Space" = "sRGB";
"Green Component" = "0.4235294163227081";
"Red Component" = "0.8784313797950745";
};
"Background Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.168627455830574";
"Color Space" = "sRGB";
"Green Component" = "0.1450980454683304";
"Red Component" = "0.1294117718935013";
};
"Badge Color" = {
"Alpha Component" = "0.5";
"Blue Component" = "0.4588235318660736";
"Color Space" = "sRGB";
"Green Component" = "0.4235294163227081";
"Red Component" = "0.8784313797950745";
};
"Bold Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Cursor Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Cursor Guide Color" = {
"Alpha Component" = "0.1764705882352941";
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Cursor Text Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Foreground Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Link Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.9372549057006836";
"Color Space" = "sRGB";
"Green Component" = "0.686274528503418";
"Red Component" = "0.3803921639919281";
};
"Selected Text Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Selection Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.2666666805744171";
"Color Space" = "sRGB";
"Green Component" = "0.2196078449487686";
"Red Component" = "0.196078434586525";
};
};
};
"Default Bookmark Guid" = "B038731D-3A7A-44EC-A1C5-8777EB3270A7";
GlobalTouchBarMap = {
"touchbar:0C8EAB5C-C453-4AEA-9DA6-05D596F01730" = {
Action = 12;
Label = "";
Text = "nix shell\\n";
Version = 1;
};
"touchbar:2DDE7A3B-26B0-4748-AED2-A453238DFF5C" = {
Action = 12;
Label = "🗑";
Text = "clear\\n";
Version = 1;
};
"touchbar:5527C3C6-A03F-4CA5-B7C1-A9B52CC89BED" = {
Action = 12;
Label = "";
Text = "git push\\n";
Version = 1;
};
"touchbar:A34F65B2-B5FE-4B8F-904C-BFF3D76D352F" = {
Action = 12;
Label = "";
Text = "git add .; git commit\\n";
Version = 1;
};
"touchbar:B8063C42-FFC8-4735-9A1B-7B5F4D477D90" = {
Action = 12;
Label = "🧐";
Text = "git status\\n";
Version = 1;
};
"touchbar:E6F32724-CABD-4079-BC0E-95C2BB50BEB7" = {
Action = 12;
Label = "";
Text = "git pull\\n";
Version = 1;
};
"NSTouchBarConfig: full screen" = {
CurrentItems = [
"touchbar:B8063C42-FFC8-4735-9A1B-7B5F4D477D90/v0"
"touchbar:A34F65B2-B5FE-4B8F-904C-BFF3D76D352F/v0"
"touchbar:5527C3C6-A03F-4CA5-B7C1-A9B52CC89BED/v0"
"touchbar:E6F32724-CABD-4079-BC0E-95C2BB50BEB7/v0"
"NSTouchBarItemIdentifierFlexibleSpace"
"touchbar:0C8EAB5C-C453-4AEA-9DA6-05D596F01730/v0"
"touchbar:2DDE7A3B-26B0-4748-AED2-A453238DFF5C/v0"
"NSTouchBarItemIdentifierOtherItemsProxy"
];
DefaultItems = [
"iTermTouchBarIdentifierManPage"
"iTermTouchBarIdentifierColorPreset"
"iTermTouchBarIdentifierFunctionKeys"
"NSTouchBarItemIdentifierFlexibleSpace"
"NSTouchBarItemIdentifierOtherItemsProxy"
"iTermTouchBarIdentifierAddMark"
"iTermTouchBarIdentifierPreviousMark"
"iTermTouchBarIdentifierNextMark"
];
};
"NSTouchBarConfig: regular" = {
CurrentItems = [
"touchbar:B8063C42-FFC8-4735-9A1B-7B5F4D477D90/v0"
"touchbar:A34F65B2-B5FE-4B8F-904C-BFF3D76D352F/v0"
"touchbar:5527C3C6-A03F-4CA5-B7C1-A9B52CC89BED/v0"
"touchbar:E6F32724-CABD-4079-BC0E-95C2BB50BEB7/v0"
"NSTouchBarItemIdentifierFlexibleSpace"
"touchbar:0C8EAB5C-C453-4AEA-9DA6-05D596F01730/v0"
"touchbar:2DDE7A3B-26B0-4748-AED2-A453238DFF5C/v0"
"NSTouchBarItemIdentifierOtherItemsProxy"
];
DefaultItems = [
"iTermTouchBarIdentifierManPage"
"iTermTouchBarIdentifierColorPreset"
"iTermTouchBarIdentifierFunctionKeys"
"NSTouchBarItemIdentifierFlexibleSpace"
"NSTouchBarItemIdentifierOtherItemsProxy"
"iTermTouchBarIdentifierAddMark"
"iTermTouchBarIdentifierPreviousMark"
"iTermTouchBarIdentifierNextMark"
];
};
"New Bookmarks" = [{
"Ansi 0 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.168627455830574";
"Color Space" = "sRGB";
"Green Component" = "0.1450980454683304";
"Red Component" = "0.1294117718935013";
};
"Ansi 1 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4588235318660736";
"Color Space" = "sRGB";
"Green Component" = "0.4235294163227081";
"Red Component" = "0.8784313797950745";
};
"Ansi 10 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4745098054409027";
"Color Space" = "sRGB";
"Green Component" = "0.7647058963775635";
"Red Component" = "0.5960784554481506";
};
"Ansi 11 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4823529422283173";
"Color Space" = "sRGB";
"Green Component" = "0.7529411911964417";
"Red Component" = "0.8980392217636108";
};
"Ansi 12 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.9372549057006836";
"Color Space" = "sRGB";
"Green Component" = "0.686274528503418";
"Red Component" = "0.3803921639919281";
};
"Ansi 13 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.8666666746139526";
"Color Space" = "sRGB";
"Green Component" = "0.4705882370471954";
"Red Component" = "0.7764706015586853";
};
"Ansi 14 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7607843279838562";
"Color Space" = "sRGB";
"Green Component" = "0.7137255072593689";
"Red Component" = "0.3372549116611481";
};
"Ansi 15 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Ansi 2 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4745098054409027";
"Color Space" = "sRGB";
"Green Component" = "0.7647058963775635";
"Red Component" = "0.5960784554481506";
};
"Ansi 3 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4823529422283173";
"Color Space" = "sRGB";
"Green Component" = "0.7529411911964417";
"Red Component" = "0.8980392217636108";
};
"Ansi 4 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.9372549057006836";
"Color Space" = "sRGB";
"Green Component" = "0.686274528503418";
"Red Component" = "0.3803921639919281";
};
"Ansi 5 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.8666666746139526";
"Color Space" = "sRGB";
"Green Component" = "0.4705882370471954";
"Red Component" = "0.7764706015586853";
};
"Ansi 6 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7607843279838562";
"Color Space" = "sRGB";
"Green Component" = "0.7137255072593689";
"Red Component" = "0.3372549116611481";
};
"Ansi 7 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Ansi 8 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4627451002597809";
"Color Space" = "sRGB";
"Green Component" = "0.4627451002597809";
"Red Component" = "0.4627451002597809";
};
"Ansi 9 Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.4588235318660736";
"Color Space" = "sRGB";
"Green Component" = "0.4235294163227081";
"Red Component" = "0.8784313797950745";
};
"BM Growl" = 1;
"Background Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.168627455830574";
"Color Space" = "sRGB";
"Green Component" = "0.1450980454683304";
"Red Component" = "0.1294117718935013";
};
"Background Image Location" = "";
"Badge Color" = {
"Alpha Component" = "0.5";
"Blue Component" = "0.4588235318660736";
"Color Space" = "sRGB";
"Green Component" = "0.4235294163227081";
"Red Component" = "0.8784313797950745";
};
"Blinking Cursor" = 0;
Blur = 1;
"Blur Radius" = "49.63241356382979";
"Bold Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Character Encoding" = 4;
"Close Sessions On End" = 1;
Columns = 80;
Command = "";
"Cursor Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Cursor Guide Color" = {
"Alpha Component" = "0.1764705882352941";
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Cursor Text Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Cursor Type" = 1;
"Custom Command" = "No";
"Custom Directory" = "No";
"Default Bookmark" = "No";
"Description" = "Default";
"Disable Window Resizing" = 1;
"Flashing Bell" = 0;
"Foreground Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Guid" = "B038731D-3A7A-44EC-A1C5-8777EB3270A7";
"Horizontal Spacing" = 1;
"Icon" = 0;
"Idle Code" = 0;
"Link Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.9372549057006836";
"Color Space" = "sRGB";
"Green Component" = "0.686274528503418";
"Red Component" = "0.3803921639919281";
};
"Mouse Reporting" = 1;
"Name" = "Default";
"Non Ascii Font" = "Monaco 12";
"Non-ASCII Anti Aliased" = 1;
"Normal Font" = "JetBrainsMonoNerdFontComplete-Regular 12";
"Option Key Sends" = 0;
"Prompt Before Closing 2" = 0;
"Right Option Key Sends" = 0;
"Rows" = 25;
"Screen" = "-1";
"Scrollback Lines" = 1000;
"Selected Text Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.7490196228027344";
"Color Space" = "sRGB";
"Green Component" = "0.6980392336845398";
"Red Component" = "0.6705882549285889";
};
"Selection Color" = {
"Alpha Component" = 1;
"Blue Component" = "0.2666666805744171";
"Color Space" = "sRGB";
"Green Component" = "0.2196078449487686";
"Red Component" = "0.196078434586525";
};
"Send Code When Idle" = 0;
"Shortcut" = "";
"Silence Bell" = 1;
"Sync Title" = 0;
"Terminal Type" = "xterm-256color";
"Transparency" = "0.3756482712765958";
"Unlimited Scrollback" = 0;
"Use Bold Font" = 1;
"Use Bright Bold" = 1;
"Use Italic Font" = 1;
"Use Non-ASCII Font" = 0;
"Vertical Spacing" = 1;
"Visual Bell" = 1;
"Window Type" = 0;
"Working Directory" = "/Users/${username}";
}];
};
};
}

9
maddie/macos/ssh.nix Normal file
View File

@ -0,0 +1,9 @@
{ config, username, ... }:
{
# Use Secretive as the ssh IdentityAgent on all hosts
programs.ssh.extraConfig = ''
Host *
IdentityAgent /Users/${username}/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh
'';
}

33
maddie/macos/tower.nix Normal file
View File

@ -0,0 +1,33 @@
{ config, ... }:
{
targets.darwin.defaults."com.fournova.Tower3" = {
"GTUserDefaultsAppAppearance" = 0;
"GTUserDefaultsAutoFetchTimeInterval" = 0;
"GTUserDefaultsBodyLineWrappingMode" = "soft";
"GTUserDefaultsCommitOptionSignOff" = 0;
"GTUserDefaultsDarkTheme" = "Default";
"GTUserDefaultsDefaultTerminalApplication" = "com.googlecode.iterm2";
"GTUserDefaultsDetailHeaderExpanded" = 1;
"GTUserDefaultsDialogueOptionPullUseRebase" = 0;
"GTUserDefaultsDiffWarningThreshold" = 20000;
"GTUserDefaultsGettingStartedPassed" = 1;
"GTUserDefaultsGitBinary" = "/usr/bin/git";
"GTUserDefaultsHideWindowTitle" = 0;
"GTUserDefaultsHistoryVerifiesGPGSignatures" = 1;
"GTUserDefaultsHistoryVerifiesGPGSignaturesInitialActivation" = 1;
"GTUserDefaultsLastApplicationVersion" = 351;
"GTUserDefaultsLightTheme" = "Default";
"GTUserDefaultsMigrationsAzureDevOpsServerHostURLMigration" = 1;
"GTUserDefaultsMigrationsCommitViewSizeMigration" = 1;
"GTUserDefaultsRepositoryFinderInitialized" = 1;
"GTUserDefaultsUpdatesReleaseChannel" = "stable";
"GTUserDefaultsUpdatesReleaseChannelReset" = 1;
"GTUserDefaultsUserProfilesInitialized" = 1;
"MSAppCenter310AppCenterUserDefaultsMigratedKey" = 1;
"MSAppCenter310CrashesUserDefaultsMigratedKey" = 1;
"NSNavLastRootDirectory" = "~/Documents/Education/Notes";
"NSNavPanelExpandedSizeForOpenMode" = "{800, 611}";
"NSNavPanelMediaBrowserTypeForOpenModeKey" = 1;
};
}

7
maddie/nixos/android.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
android-studio
];
}

15
maddie/nixos/audio.nix Normal file
View File

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
pulsemixer # TUI sound mixer
playerctl # Manages media players
pamixer # CLI sound mixer
cava # Music visualiser
];
home.file.".local/bin/volume" = {
source = ./audio/volume.sh;
executable = true;
};
}

24
maddie/nixos/audio/volume.sh Executable file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env sh
COMMAND="$@"
[ -z $COMMAND ] && echo "usage: volume [up|down|mute]" && exit 1
if [ $COMMAND = "up" ]; then
pamixer --allow-boost -i 5
elif [ $COMMAND = "down" ]; then
pamixer --allow-boost -d 5
elif [ $COMMAND = "mute" ]; then
pamixer -t
else
echo "volume: command not found" && exit 1
fi
MUTED="$(pamixer --get-mute)"
if [ $MUTED = "true" ]; then
MUTE_CHAR="!"
else
MUTE_CHAR=""
fi
VOLUME=$(pamixer --get-volume)
echo "$VOLUME""$MUTE_CHAR" > /tmp/volume.fifo

7
maddie/nixos/awesome.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, ... }:
{
xsession.windowManager.awesome = {
enable = true;
};
}

12
maddie/nixos/bosskey.nix Normal file
View File

@ -0,0 +1,12 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
slock
];
home.file.".local/bin/bosskey" = {
source = ./bosskey/bosskey.sh;
executable = true;
};
}

39
maddie/nixos/bosskey/bosskey.sh Executable file
View File

@ -0,0 +1,39 @@
#!/bin/sh
while getopts "lrpm:u:" options; do
case $options in
m)
devices=$OPTARG
if echo "$devices" | grep "mic" &>/dev/null; then
# Mute the microphone
pamixer --default-source --mute
fi
if echo "$devices" | grep "vol" &>/dev/null; then
# Mute the volume
pamixer --mute
fi
;;
u)
devices=$OPTARG
if echo "$devices"| grep "mic" &>/dev/null; then
# Mute the microphone
pamixer --default-source --unmute
fi
if echo "$devices" | grep "vol" &>/dev/null; then
# Unmute the volume
pamixer --unmute
fi
;;
p)
# Pause any playing media
playerctl pause
;;
l)
# Lock the screen using slock(1)
slock
;;
esac
done

View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
nodePackages.insect
];
}

29
maddie/nixos/chromium.nix Normal file
View File

@ -0,0 +1,29 @@
{ config, ... }:
{
programs.chromium = {
enable = true;
commandLineArgs = [
"--enable-logging=stderr"
"--ignore-gpu-blocklist"
];
extensions = [
# Dark Reader
{ id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; }
# uBlock Origin
{ id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; }
# I still don't care about cookies
{ id = "edibdbjcniadpccecjdfdjjppcpchdlm"; }
# NoScript
{ id = "doojmbjmlfjjnbmnoijecmcbfeoakpjm"; }
# Reddit Enhancement Suite
{ id = "kbmfpngjjgdllneeigpgjifpgocmfgmb"; }
# Old Reddit Redirect
{ id = "dneaehbmnbhcippjikoajpoabadpodje"; }
# Return Youtube Dislike
{ id = "gebbhagfogifgggkldgodflihgfeippi"; }
# Vimium
{ id = "dbepggeogbaibhgnhhndojpepiihcmeb"; }
];
};
}

7
maddie/nixos/cider.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
cider
];
}

16
maddie/nixos/dmenu.nix Normal file
View File

@ -0,0 +1,16 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
dmenu
];
home.file.".local/bin/dmenu" = {
source = ./dmenu;
executable = true;
};
home.sessionPath = [
"$HOME/.local/bin/dmenu"
];
}

View File

@ -0,0 +1,317 @@
#!/bin/sh
# _ _ _ _ _ _
# __| |_ __ ___ ___ _ __ _ _ | |__ | |_ _ ___| |_ ___ ___ | |_ | |__
# / _` | '_ ` _ \ / _ \ '_ \| | | |_____| '_ \| | | | |/ _ \ __/ _ \ / _ \| __|| '_ \
# | (_| | | | | | | __/ | | | |_| |_____| |_) | | |_| | __/ || (_) | (_) | |_ | | | |
# \__,_|_| |_| |_|\___|_| |_|\__,_| |_.__/|_|\__,_|\___|\__\___/ \___/ \__||_| |_|
#
# Author: Nick Clyde (clydedroid)
# dmenu support by: Layerex
#
# A script that generates a dmenu menu that uses bluetoothctl to
# connect to bluetooth devices and display status info.
#
# Inspired by networkmanager-dmenu (https://github.com/firecat53/networkmanager-dmenu)
# Thanks to x70b1 (https://github.com/polybar/polybar-scripts/tree/master/polybar-scripts/system-bluetooth-bluetoothctl)
#
# Depends on:
# Arch repositories: dmenu, bluez-utils (contains bluetoothctl)
# Constants
divider="---------"
goback="Back"
# Checks if bluetooth controller is powered on
power_on() {
if bluetoothctl show | grep -F -q "Powered: yes"; then
return 0
else
return 1
fi
}
# Toggles power state
toggle_power() {
if power_on; then
bluetoothctl power off
show_menu
else
if rfkill list bluetooth | grep -F -q 'blocked: yes'; then
rfkill unblock bluetooth && sleep 3
fi
bluetoothctl power on
show_menu
fi
}
# Checks if controller is scanning for new devices
scan_on() {
if bluetoothctl show | grep -F -q "Discovering: yes"; then
echo "Scan: on"
return 0
else
echo "Scan: off"
return 1
fi
}
# Toggles scanning state
toggle_scan() {
if scan_on; then
kill "$(pgrep -F -f "bluetoothctl scan on")"
bluetoothctl scan off
show_menu
else
bluetoothctl scan on &
echo "Scanning..."
sleep 5
show_menu
fi
}
# Checks if controller is able to pair to devices
pairable_on() {
if bluetoothctl show | grep -F -q "Pairable: yes"; then
echo "Pairable: on"
return 0
else
echo "Pairable: off"
return 1
fi
}
# Toggles pairable state
toggle_pairable() {
if pairable_on; then
bluetoothctl pairable off
show_menu
else
bluetoothctl pairable on
show_menu
fi
}
# Checks if controller is discoverable by other devices
discoverable_on() {
if bluetoothctl show | grep -F -q "Discoverable: yes"; then
echo "Discoverable: on"
return 0
else
echo "Discoverable: off"
return 1
fi
}
# Toggles discoverable state
toggle_discoverable() {
if discoverable_on; then
bluetoothctl discoverable off
show_menu
else
bluetoothctl discoverable on
show_menu
fi
}
# Checks if a device is connected
device_connected() {
device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -F -q "Connected: yes"; then
return 0
else
return 1
fi
}
# Toggles device connection
toggle_connection() {
if device_connected "$1"; then
bluetoothctl disconnect "$1"
# device_menu "$device"
else
bluetoothctl connect "$1"
# device_menu "$device"
fi
}
# Checks if a device is paired
device_paired() {
device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -F -q "Paired: yes"; then
echo "Paired: yes"
return 0
else
echo "Paired: no"
return 1
fi
}
# Toggles device paired state
toggle_paired() {
if device_paired "$1"; then
bluetoothctl remove "$1"
device_menu "$device"
else
bluetoothctl pair "$1"
device_menu "$device"
fi
}
# Checks if a device is trusted
device_trusted() {
device_info=$(bluetoothctl info "$1")
if echo "$device_info" | grep -F -q "Trusted: yes"; then
echo "Trusted: yes"
return 0
else
echo "Trusted: no"
return 1
fi
}
# Toggles device connection
toggle_trust() {
if device_trusted "$1"; then
bluetoothctl untrust "$1"
device_menu "$device"
else
bluetoothctl trust "$1"
device_menu "$device"
fi
}
# Prints a short string with the current bluetooth status
# Useful for status bars like polybar, etc.
print_status() {
if power_on; then
printf ''
mapfile -t paired_devices < <(bluetoothctl paired-devices | grep -F Device | cut -d ' ' -f 2)
counter=0
for device in "${paired_devices[@]}"; do
if device_connected "$device"; then
device_alias="$(bluetoothctl info "$device" | grep -F "Alias" | cut -d ' ' -f 2-)"
if [ $counter -gt 0 ]; then
printf ", %s" "$device_alias"
else
printf " %s" "$device_alias"
fi
((counter++))
fi
done
printf "\n"
else
echo ""
fi
}
# A submenu for a specific device that allows connecting, pairing, and trusting
device_menu() {
device=$1
# Get device name and mac address
device_name="$(echo "$device" | cut -d ' ' -f 3-)"
mac="$(echo "$device" | cut -d ' ' -f 2)"
# Build options
if device_connected "$mac"; then
connected="Connected: yes"
else
connected="Connected: no"
fi
paired=$(device_paired "$mac")
trusted=$(device_trusted "$mac")
options="$connected\n$paired\n$trusted\n$divider\n$goback\nExit"
# Open dmenu menu, read chosen option
chosen="$(echo -e "$options" | run_dmenu "$device_name")"
# Match chosen option to command
case $chosen in
"" | "$divider")
echo "No option chosen."
;;
"$connected")
toggle_connection "$mac"
;;
"$paired")
toggle_paired "$mac"
;;
"$trusted")
toggle_trust "$mac"
;;
"$goback")
show_menu
;;
esac
}
# Opens a dmenu menu with current bluetooth status and options to connect
show_menu() {
# Get menu options
if power_on; then
power="Power: on"
# Human-readable names of devices, one per line
# If scan is off, will only list paired devices
devices=$(bluetoothctl devices | grep -F Device | cut -d ' ' -f 3-)
# Get controller flags
scan=$(scan_on)
pairable=$(pairable_on)
discoverable=$(discoverable_on)
# Options passed to dmenu
options="$devices\n$divider\n$power\n$scan\n$pairable\n$discoverable\nExit"
else
power="Power: off"
options="$power\nExit"
fi
# Open dmenu menu, read chosen option
chosen="$(echo -e "$options" | run_dmenu "Bluetooth")"
# Match chosen option to command
case $chosen in
"" | "$divider")
echo "No option chosen."
;;
"$power")
toggle_power
;;
"$scan")
toggle_scan
;;
"$discoverable")
toggle_discoverable
;;
"$pairable")
toggle_pairable
;;
*)
device=$(bluetoothctl devices | grep -F "$chosen")
# Open a submenu if a device is selected
if [[ $device ]]; then device_menu "$device"; fi
;;
esac
}
original_args=("$@")
# dmenu command to pipe into. Extra arguments to dmenu-bluetooth are passed through to dmenu. This
# allows the user to set fonts, sizes, colours, etc.
run_dmenu() {
dmenu "${original_args[@]}" -i -p "$1"
}
case "$1" in
--status)
print_status
;;
*)
show_menu
;;
esac

3
maddie/nixos/dmenu/dmenu-code Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
st -e 'zsh' -c 'cd ~/Documents/Code/"$(exa -lh --icons ~/Documents/Code | tail -n +2 | dmenu -l 30 | sed "s|.* ||")"; zsh'

View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
NOTIFICATIONS_TITLE="KDE Connect"
NOTIFICATIONS_EXPIRE_TIME=1000
notify-send "$NOTIFICATIONS_TITLE" "Getting devices..." --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
# Get available devices
devices="$(kdeconnect-cli -a)"
[ -z "$devices" ] && notify-send "$NOTIFICATIONS_TITLE" "No devices available" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
# Let the user choose a device
device="$(echo "$devices" | sed 's/-\ //' | sed 's/:.*//' | dmenu -i -p "Devices:")"
if [ $? -eq 0 ]
then
# Send files to a device
📂File() {
file="$(zenity --file-selection)"
kdeconnect-cli -n "$device" --share "$file"
[ "$?" -eq 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📂 Shared file: $file" --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
[ "$?" -ne 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📂 Failed to share file: $file" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
}
# Ping a device
📳Ping() {
kdeconnect-cli -n "$device" --ping
[ "$?" -eq 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📳 Pinged device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
[ "$?" -ne 0 ] && notify-send "$NOTIFICATIONS_TITLE" "📳 Unable to ping device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
}
# Make a device ring
Ring() {
kdeconnect-cli -n "$device" --ring
[ "$?" -eq 0 ] && notify-send "$NOTIFICATIONS_TITLE" "☎️ Ringed device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME"
[ "$?" -ne 0 ] && notify-send "$NOTIFICATIONS_TITLE" "☎️ Unable to ring device: $device" --expire-time="$NOTIFICATIONS_EXPIRE_TIME" && exit 1
}
# Show functions in dmenu and run the chosen function
func="$(declare -F | awk '{print $3}' | dmenu -i -p "$device":)"
[ -z "$func" ] || "$func"
fi

2
maddie/nixos/dmenu/dmenu-man Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
man -t $(man -k . | dmenu -l 30 | awk '{print $1}') | ps2pdf - - | zathura -

67
maddie/nixos/dmenu/dmenu-mount Executable file
View File

@ -0,0 +1,67 @@
#!/bin/sh
# Gives a dmenu prompt to mount unmounted drives and Android phones. If
# they're in /etc/fstab, they'll be mounted automatically. Otherwise, you'll
# be prompted to give a mountpoint from already existsing directories. If you
# input a novel directory, it will prompt you to create that directory.
getmount() { \
[ -z "$chosen" ] && exit 1
# shellcheck disable=SC2086
mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1
test -z "$mp" && exit 1
if [ ! -d "$mp" ]; then
mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
fi
}
mountusb() { \
chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1
chosen="$(echo "$chosen" | awk '{print $1}')"
sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0
alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted"
partitiontype="$(lsblk -no "fstype" "$chosen")"
case "$partitiontype" in
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)";;
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
esac
notify-send "💻 USB mounting" "$chosen mounted to $mp."
}
mountandroid() { \
chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
chosen="$(echo "$chosen" | cut -d : -f 1)"
getmount "$HOME -maxdepth 3 -type d"
simple-mtpfs --device "$chosen" "$mp"
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
simple-mtpfs --device "$chosen" "$mp"
notify-send "🤖 Android Mounting" "Android device mounted to $mp."
}
asktype() { \
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1
case $choice in
USB) mountusb ;;
Android) mountandroid ;;
esac
}
anddrives=$(simple-mtpfs -l 2>/dev/null)
usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | grep 'part\|rom' | awk '$4==""{printf "%s (%s)\n",$1,$3}')"
if [ -z "$usbdrives" ]; then
[ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit
echo "Android device(s) detected."
mountandroid
else
if [ -z "$anddrives" ]; then
echo "USB drive(s) detected."
mountusb
else
echo "Mountable USB drive(s) and Android device(s) detected."
asktype
fi
fi

14
maddie/nixos/dmenu/dmenu-mpc Executable file
View File

@ -0,0 +1,14 @@
#!/usr/bin/env bash
playing=$(mpc current)
[ -z "$playing" ] && playing="Stopped"
play() { mpc play ;}
pause() { mpc pause ;}
next() { mpc next ;}
prev() { mpc prev ;}
stop() { mpc stop ;}
🔄update() { mpc update ;}
func="$(declare -F | awk '{print $3}' | dmenu -i -p "$playing":)"
[ -z "$func" ] || "$func"

35
maddie/nixos/dmenu/dmenu-pass Executable file
View File

@ -0,0 +1,35 @@
#!/usr/bin/env bash
shopt -s nullglob globstar
typeit=0
if [[ $1 == "--type" ]]; then
typeit=1
shift
fi
if [[ -n $WAYLAND_DISPLAY ]]; then
dmenu=dmenu-wl
xdotool="ydotool type --file -"
elif [[ -n $DISPLAY ]]; then
dmenu=dmenu
xdotool="xdotool type --clearmodifiers --file -"
else
echo "Error: No Wayland or X11 display detected" >&2
exit 1
fi
prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files=( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )
password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" "$@")
[[ -n $password ]] || exit
if [[ $typeit -eq 0 ]]; then
pass show -c "$password" 2>/dev/null
else
pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | $xdotool
fi

9
maddie/nixos/dmenu/dmenu-power Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
poweroff() { systemctl shutdown ;}
restart() { killall -HUP dwm ;}
reboot() { system reboot ;}
lock() { bosskey ;}
func="$(declare -F | awk '{print $3}' | dmenu -i -p "Power:")"
[ -z "$func" ] || "$func"

View File

@ -0,0 +1,18 @@
#!/bin/sh
# The famous "get a menu of emojis to copy" script.
# Get user selection via dmenu from emoji file.
chosen=$(cut -d ';' -f1 ~/.local/share/emoji-list | dmenu -i -l 30 | sed "s/ .*//")
# Exit if none chosen.
[ -z "$chosen" ] && exit
# If you run this command with an argument, it will automatically insert the
# character. Otherwise, show a message that the emoji has been copied.
if [ -n "$1" ]; then
xdotool type "$chosen"
else
printf "$chosen" | xclip -selection clipboard
notify-send "'$chosen' copied to clipboard." &
fi

View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
drawterm
];
}

44
maddie/nixos/dunst.nix Normal file
View File

@ -0,0 +1,44 @@
{ config, pkgs, ... }:
{
services.dunst = {
enable = true;
settings = {
global = {
# Style
format = "<b>%s</b>\n%b";
font = "Iosevka 10";
width = 370;
height = 370;
offset = "0x50";
padding = 5;
frame_width = 2;
# Location
monitor = 0;
origin = "bottom-center";
};
urgency_low = {
background = "#121317";
foreground = "#D6DEEB";
frame_color = "#2C323D";
timeout = 3;
};
urgency_normal = {
background = "#121317";
foreground = "#D6DEEB";
frame_color = "#2C323D";
timeout = 5;
};
urgency_critical = {
background = "#121317";
foreground = "#D6DEEB";
frame_color = "#E06C75";
timeout = 10;
};
};
};
}

7
maddie/nixos/dwm.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
dwm # Suckless dynamic window manager
];
}

8
maddie/nixos/files.nix Normal file
View File

@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
ncdu_2 # Disk space manager
clifm # TUI file manager
];
}

8
maddie/nixos/games.nix Normal file
View File

@ -0,0 +1,8 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
gzdoom # Modern doom runner
pcsx2 # PS2 Emulator
];
}

7
maddie/nixos/gcolor2.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
gcolor2 # Color viewer and eyedropper
];
}

25
maddie/nixos/gtk.nix Normal file
View File

@ -0,0 +1,25 @@
{ config, pkgs, ... }:
{
gtk = {
enable = true;
font = {
package = pkgs.iosevka;
name = "Iosevka";
size = 10;
};
theme = {
package = pkgs.lounge-gtk-theme;
name = "Lounge-night-compact";
};
iconTheme = {
package = pkgs.whitesur-icon-theme;
name = "WhiteSur-dark";
};
};
home.packages = with pkgs; [
gnome.zenity
libsForQt5.breeze-gtk
];
}

10
maddie/nixos/home.nix Normal file
View File

@ -0,0 +1,10 @@
{ config, username, ... }:
{
programs.home-manager.enable = true;
home = {
inherit username;
homeDirectory = "/home/${username}";
stateVersion = "22.11";
};
}

View File

@ -0,0 +1,12 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
jetbrains.clion
jetbrains.goland
jetbrains.webstorm
jetbrains.datagrip
jetbrains.rust-rover
jetbrains.pycharm-professional
];
}

View File

@ -0,0 +1,10 @@
{ config, ... }:
{
services.kdeconnect.enable = true;
home.file.".xprofile".text = ''
# Start kdeconnect when entering a graphical session
systemctl restart --user kdeconnect.service &
'';
}

View File

@ -0,0 +1,12 @@
{ config, ... }:
{
programs.librewolf = {
enable = true;
settings = {
"browser.uidensity" = 1;
"webgl.disabled" = false;
"privacy.resistFingerprinting" = true;
};
};
}

View File

@ -0,0 +1,12 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
schildichat-desktop # Matrix client, fork of element
signal-desktop # Signal client
cinny-desktop # Pretty matrix client
discord-canary # Discord client
ripcord # Better discord client
nheko # Better matrix client
];
}

View File

@ -0,0 +1,9 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
prismlauncher # Minecraft launcher
minecraft # Actual minecraft
/*jdk # Needed for running minecraft servers */
];
}

41
maddie/nixos/mpd.nix Normal file
View File

@ -0,0 +1,41 @@
{ config, pkgs, username, ... }:
{
services.mpd = {
enable = true;
musicDirectory = "${config.home.homeDirectory}/Music";
extraConfig = ''
auto_update "yes"
audio_output {
type "pipewire"
name "PipeWire Sound Server"
}
audio_output {
type "fifo"
name "Visualizer feed"
path "/tmp/mpd.fifo"
format "44100:16:2"
}
'';
};
services.mpdris2 = {
enable = true;
multimediaKeys = true;
notifications = true;
};
home.packages = with pkgs; [
mpc_cli
];
programs.ncmpcpp = {
enable = true;
settings = {
ncmpcpp_directory = "${config.home.homeDirectory}/.local/share/ncmpcpp";
lyrics_directory = "${config.home.homeDirectory}/.local/share/lyrics";
};
};
}

10
maddie/nixos/mpv.nix Normal file
View File

@ -0,0 +1,10 @@
{ config, ... }:
{
programs.mpv = {
enable = true;
config = {
loop-file = "inf";
};
};
}

7
maddie/nixos/neovide.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
neovide
];
}

16
maddie/nixos/nsxiv.nix Normal file
View File

@ -0,0 +1,16 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
nsxiv
];
xdg.configFile."nsxiv" = {
source = ./nsxiv;
};
xresources.properties = {
"Nsxiv.window.foreground" = "#D6DEEB";
"Nsxiv.window.background" = "#1E2127";
"Nsxiv.bar.background" = "#2C323D";
"Nsxiv.bar.foreground" = "#D6DEEB";
};
}

Some files were not shown because too many files have changed in this diff Show More