initial commit
This commit is contained in:
commit
5aabf26cd7
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
result
|
||||||
|
*/result
|
10
README.md
Normal file
10
README.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Maddie's NixFiles
|
||||||
|
A Nix flake for my system configuration - WIP.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
- `./maddie` - A folder for my home-manager config
|
||||||
|
- `./system` - A folder for my system-wide config
|
||||||
|
- `overlays.nix` - A file for my nixpkgs overlays
|
||||||
|
|
||||||
|
## Many thanks
|
||||||
|
- ❤️ Thanks to @Minion3665 who helped me make this config
|
62
flake.lock
Normal file
62
flake.lock
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": "utils"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1678109311,
|
||||||
|
"narHash": "sha256-Q64FoCH5rp3XHoC8u1+KyjLEFGTY7kX9YaIaYfugvfY=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "04d6cad67557512452decbfe888c68fa11338a96",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1678116888,
|
||||||
|
"narHash": "sha256-/Y4RTkPq+RVJjkoM/mYyCREFLZhvtISc/rLcgM1vLvo=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "49596eb4e50b18337aad3b73317371bcd4e3b047",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1676283394,
|
||||||
|
"narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
36
flake.nix
Normal file
36
flake.nix
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
description = "Maddie's NixOS configuration";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
# Home manager
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, home-manager }:
|
||||||
|
let
|
||||||
|
username = "spy";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs { inherit system; config.allowUnfree = true; overlays = import ./overlays.nix; };
|
||||||
|
utils = import ./utils pkgs;
|
||||||
|
specialArgs = { inherit username; inherit pkgs; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
packages.${system} = {
|
||||||
|
nixosConfigurations.luna = nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
inherit pkgs;
|
||||||
|
inherit specialArgs;
|
||||||
|
modules = [
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.users.${username}.imports = utils.nixFilesIn ./maddie;
|
||||||
|
home-manager.extraSpecialArgs = specialArgs;
|
||||||
|
}
|
||||||
|
] ++ utils.nixFilesIn ./system;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt;
|
||||||
|
};
|
||||||
|
}
|
15
maddie/audio.nix
Normal file
15
maddie/audio.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pulsemixer # TUI sound mixer
|
||||||
|
pamixer # CLI sound mixer
|
||||||
|
playerctl # Manages media players
|
||||||
|
cava # Music visualiser
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/ytdlp-music" = {
|
||||||
|
source = ./audio/ytdlp-music.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
6
maddie/audio/ytdlp-music.sh
Executable file
6
maddie/audio/ytdlp-music.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
echo "Name:" && read name
|
||||||
|
echo "URL:" && read url
|
||||||
|
|
||||||
|
yt-dlp -x --no-playlist --embed-thumbnail -no-embed-metadata --audio-quality 0 --audio-format flac -o "$name" "$url"
|
12
maddie/bosskey.nix
Normal file
12
maddie/bosskey.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, pkgs, ...}:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
slock
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/bosskey" = {
|
||||||
|
source = ./bosskey/bosskey.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
50
maddie/bosskey/bosskey.sh
Executable file
50
maddie/bosskey/bosskey.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# ____ _
|
||||||
|
# | __ ) ___ ___ ___| | _____ _ _
|
||||||
|
# | _ \ / _ \/ __/ __| |/ / _ \ | | |
|
||||||
|
# | |_) | (_) \__ \__ \ < __/ |_| |
|
||||||
|
# |____/ \___/|___/___/_|\_\___|\__, |
|
||||||
|
# |___/ v1.2
|
||||||
|
# GitHub: https://github.com/SpyHoodle/bosskey
|
||||||
|
|
||||||
|
|
||||||
|
function refresh_statusbar() {
|
||||||
|
case $1 in
|
||||||
|
dwmblocks)
|
||||||
|
# Refresh dwmblocks as it only updates when told so
|
||||||
|
kill -35 $(pidof dwmblocks)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while getopts "lmpur" options; do
|
||||||
|
case $options in
|
||||||
|
m)
|
||||||
|
# Mute the volume
|
||||||
|
pamixer --mute
|
||||||
|
;;
|
||||||
|
|
||||||
|
p)
|
||||||
|
# Pause any playing media
|
||||||
|
playerctl pause
|
||||||
|
;;
|
||||||
|
|
||||||
|
l)
|
||||||
|
# Lock the screen using slock(1)
|
||||||
|
slock
|
||||||
|
;;
|
||||||
|
|
||||||
|
u)
|
||||||
|
# Unmute the audio
|
||||||
|
pamixer --unmute
|
||||||
|
;;
|
||||||
|
|
||||||
|
r)
|
||||||
|
# Refresh a dwmblocks status bar
|
||||||
|
refresh_statusbar "dwmblocks"
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
done
|
10
maddie/browser.nix
Normal file
10
maddie/browser.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
tor-browser-bundle-bin
|
||||||
|
librewolf
|
||||||
|
amfora
|
||||||
|
lynx
|
||||||
|
];
|
||||||
|
}
|
12
maddie/btop.nix
Normal file
12
maddie/btop.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, ...}:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.btop = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
color_theme = "TTY";
|
||||||
|
theme_background = false;
|
||||||
|
truecolor = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
7
maddie/calculator.nix
Normal file
7
maddie/calculator.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nodePackages.insect
|
||||||
|
];
|
||||||
|
}
|
29
maddie/chromium.nix
Normal file
29
maddie/chromium.nix
Normal 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"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
9
maddie/code.nix
Normal file
9
maddie/code.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
python3Full # Python
|
||||||
|
go # Go
|
||||||
|
gcc # C
|
||||||
|
];
|
||||||
|
}
|
17
maddie/dmenu.nix
Normal file
17
maddie/dmenu.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dmenu
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/dmenu" = {
|
||||||
|
source = ./dmenu;
|
||||||
|
executable = true;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [
|
||||||
|
"$HOME/.local/bin/dmenu"
|
||||||
|
];
|
||||||
|
}
|
317
maddie/dmenu/dmenu-bluetooth
Executable file
317
maddie/dmenu/dmenu-bluetooth
Executable 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
|
67
maddie/dmenu/dmenu-mount
Executable file
67
maddie/dmenu/dmenu-mount
Executable 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
|
35
maddie/dmenu/dmenu-pass
Executable file
35
maddie/dmenu/dmenu-pass
Executable 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/dmenu/dmenu-power
Executable file
9
maddie/dmenu/dmenu-power
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
poweroff() { sudo poweroff ;}
|
||||||
|
restart() { killall -HUP dwm ;}
|
||||||
|
reboot() { sudo reboot ;}
|
||||||
|
lock() { bosskey ;}
|
||||||
|
|
||||||
|
func="$(declare -F | awk '{print $3}' | dmenu -i -p "Powermenu:")"
|
||||||
|
[ -z "$func" ] || "$func"
|
18
maddie/dmenu/dmenu-unicode
Executable file
18
maddie/dmenu/dmenu-unicode
Executable 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
|
44
maddie/dunst.nix
Normal file
44
maddie/dunst.nix
Normal 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/dwm.nix
Normal file
7
maddie/dwm.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dwm # Suckless dynamic window manager
|
||||||
|
];
|
||||||
|
}
|
10
maddie/editor.nix
Normal file
10
maddie/editor.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Misc editors
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
vscode
|
||||||
|
helix
|
||||||
|
vis
|
||||||
|
];
|
||||||
|
}
|
9
maddie/fetch.nix
Normal file
9
maddie/fetch.nix
Normal 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
|
||||||
|
];
|
||||||
|
}
|
8
maddie/files.nix
Normal file
8
maddie/files.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
ncdu_2 # Disk space manager
|
||||||
|
clifm # TUI file manager
|
||||||
|
];
|
||||||
|
}
|
48
maddie/firefox.nix
Normal file
48
maddie/firefox.nix
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
profiles = {
|
||||||
|
"maddie" = {
|
||||||
|
name = "Maddie";
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "Home";
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "BT Home Hub";
|
||||||
|
url = "http://192.168.1.254/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Home Assistant";
|
||||||
|
url = "http://192.168.1.105:8123/lovelace/0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Security Cameras";
|
||||||
|
url = "http://192.168.1.108/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Fast";
|
||||||
|
url = "https://fast.com/";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Nix";
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "NixOS Packages";
|
||||||
|
url = "https://search.nixos.org/packages";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "NixOS Options";
|
||||||
|
url = "https://search.nixos.org/options";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
9
maddie/games.nix
Normal file
9
maddie/games.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gzdoom # Modern doom runner
|
||||||
|
pcsx2 # PS2 Emulator# PS2 Emulator# PS2 Emulator
|
||||||
|
steam # Large games store
|
||||||
|
];
|
||||||
|
}
|
41
maddie/git.nix
Normal file
41
maddie/git.nix
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gitkraken
|
||||||
|
gh
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/git-sync" = {
|
||||||
|
source = ./git/git-sync.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
lfs.enable = true;
|
||||||
|
|
||||||
|
userName = "Madeleine";
|
||||||
|
userEmail = "spyhoodle@icloud.com";
|
||||||
|
signing = {
|
||||||
|
key = "A8B3F646462101EEA4493B3164FAA9959751687D";
|
||||||
|
signByDefault = true;
|
||||||
|
gpgPath = "gpg2";
|
||||||
|
};
|
||||||
|
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
6
maddie/git/git-sync.sh
Normal file
6
maddie/git/git-sync.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -am "$(date --iso-8601)"
|
||||||
|
git pull
|
||||||
|
git push
|
20
maddie/gtk.nix
Normal file
20
maddie/gtk.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
font = {
|
||||||
|
package = pkgs.iosevka;
|
||||||
|
name = "Iosevka";
|
||||||
|
size = 10;
|
||||||
|
};
|
||||||
|
theme = {
|
||||||
|
package = pkgs.gruvbox-dark-gtk;
|
||||||
|
name = "gruvbox-dark";
|
||||||
|
};
|
||||||
|
iconTheme = {
|
||||||
|
package = pkgs.zafiro-icons;
|
||||||
|
name = "Zafiro-icons-Dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
maddie/home.nix
Normal file
10
maddie/home.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
home = {
|
||||||
|
inherit username;
|
||||||
|
homeDirectory = "/home/${username}";
|
||||||
|
stateVersion = "22.11";
|
||||||
|
};
|
||||||
|
}
|
19
maddie/htop.nix
Normal file
19
maddie/htop.nix
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
maddie/jetbrains.nix
Normal file
10
maddie/jetbrains.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
jetbrains.clion
|
||||||
|
jetbrains.goland
|
||||||
|
jetbrains.webstorm
|
||||||
|
jetbrains.pycharm-professional
|
||||||
|
];
|
||||||
|
}
|
25
maddie/kakoune.nix
Normal file
25
maddie/kakoune.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.kakoune = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
numberLines = {
|
||||||
|
enable = true;
|
||||||
|
relative = true;
|
||||||
|
};
|
||||||
|
scrollOff.lines = 3;
|
||||||
|
showWhitespace.enable = true;
|
||||||
|
tabStop = 4;
|
||||||
|
ui = {
|
||||||
|
assistant = "cat";
|
||||||
|
enableMouse = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
plugins = with pkgs.kakounePlugins; [
|
||||||
|
kakoune-rainbow
|
||||||
|
powerline-kak
|
||||||
|
auto-pairs-kak
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
10
maddie/kdeconnect.nix
Normal file
10
maddie/kdeconnect.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.kdeconnect.enable = true;
|
||||||
|
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Start kdeconnect when entering a graphical session
|
||||||
|
systemctl restart --user kdeconnect &
|
||||||
|
'';
|
||||||
|
}
|
9
maddie/media.nix
Normal file
9
maddie/media.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
libheif # Manage .heif files from phones
|
||||||
|
gcolor2 # Color viewer and eyedropper
|
||||||
|
ffmpeg # Video manipulator
|
||||||
|
];
|
||||||
|
}
|
10
maddie/messaging.nix
Normal file
10
maddie/messaging.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
signal-desktop # Signal client
|
||||||
|
discord-canary # Discord client
|
||||||
|
ripcord # Better discord client
|
||||||
|
element # Matrix client
|
||||||
|
];
|
||||||
|
}
|
9
maddie/minecraft.nix
Normal file
9
maddie/minecraft.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
prismlauncher # Minecraft launcher
|
||||||
|
minecraft # Actual minecraft
|
||||||
|
jdk # Needed for running minecraft servers
|
||||||
|
];
|
||||||
|
}
|
12
maddie/mommy.nix
Normal file
12
maddie/mommy.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
77
maddie/mommy/shell-mommy.sh
Executable file
77
maddie/mommy/shell-mommy.sh
Executable 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
|
17
maddie/mpd.nix
Normal file
17
maddie/mpd.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ config, pkgs, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.mpd.enable = true;
|
||||||
|
services.mpd.musicDirectory = "/home/${username}/Music";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
mpc_cli
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.ncmpcpp = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
ncmpcpp_directory = "~/.local/share/ncmpcpp";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
maddie/mpv.nix
Normal file
10
maddie/mpv.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.mpv = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
loop-file = "inf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
27
maddie/neovim.nix
Normal file
27
maddie/neovim.nix
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
nodejs
|
||||||
|
sumneko-lua-language-server
|
||||||
|
nodePackages.bash-language-server
|
||||||
|
nodePackages.vim-language-server
|
||||||
|
nodePackages.pyright
|
||||||
|
rust-analyzer
|
||||||
|
rnix-lsp
|
||||||
|
universal-ctags
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
neovide
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.configFile."nvim" = {
|
||||||
|
source = ./neovim;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
}
|
1
maddie/neovim/.gitignore
vendored
Normal file
1
maddie/neovim/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
plugin
|
21
maddie/neovim/LICENSE
Normal file
21
maddie/neovim/LICENSE
Normal 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.
|
22
maddie/neovim/README.md
Normal file
22
maddie/neovim/README.md
Normal 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 🏳️⚧️.
|
255
maddie/neovim/init.lua
Normal file
255
maddie/neovim/init.lua
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
-- 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()
|
||||||
|
require('transparent').setup({
|
||||||
|
enable = 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)
|
36
maddie/neovim/lua/basics.lua
Normal file
36
maddie/neovim/lua/basics.lua
Normal 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 = 'Iosevka:h12'
|
||||||
|
vim.g.neovide_cursor_vfx_mode = 'railgun'
|
||||||
|
vim.g.neovide_remember_window_size = true
|
1
maddie/neovim/lua/colours.lua
Normal file
1
maddie/neovim/lua/colours.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
vim.cmd([[colorscheme onedark]])
|
59
maddie/neovim/lua/keymaps.lua
Normal file
59
maddie/neovim/lua/keymaps.lua
Normal 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)
|
117
maddie/neovim/lua/plugins/cmp.lua
Normal file
117
maddie/neovim/lua/plugins/cmp.lua
Normal 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()
|
||||||
|
}
|
6
maddie/neovim/spell/en.utf-8.add
Normal file
6
maddie/neovim/spell/en.utf-8.add
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
macOS
|
||||||
|
JS
|
||||||
|
add evelyne
|
||||||
|
evelyne
|
||||||
|
camhs
|
||||||
|
Vernova
|
BIN
maddie/neovim/spell/en.utf-8.add.spl
Normal file
BIN
maddie/neovim/spell/en.utf-8.add.spl
Normal file
Binary file not shown.
16
maddie/nsxiv.nix
Normal file
16
maddie/nsxiv.nix
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
14
maddie/nsxiv/exec/key-handler
Executable file
14
maddie/nsxiv/exec/key-handler
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
while read file
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
"d")
|
||||||
|
rm -rf $file ;;
|
||||||
|
"r")
|
||||||
|
convert -rotate 90 "$file" "$file" ;;
|
||||||
|
"y")
|
||||||
|
echo -n "$file" | xclip -selection clipboard ;;
|
||||||
|
"w")
|
||||||
|
xwallpaper --zoom "$file" && kill $(pidof nsxiv);;
|
||||||
|
esac
|
||||||
|
done
|
5
maddie/obs-studio.nix
Normal file
5
maddie/obs-studio.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.obs-studio.enable = true;
|
||||||
|
}
|
12
maddie/office.nix
Normal file
12
maddie/office.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
texlive.combined.scheme-full # LaTeX
|
||||||
|
libreoffice # Documents suite
|
||||||
|
thunderbird # Email client
|
||||||
|
obsidian # Notes app
|
||||||
|
sc-im # TUI spreadsheet
|
||||||
|
anki # Flashcard app
|
||||||
|
];
|
||||||
|
}
|
12
maddie/openrgb.nix
Normal file
12
maddie/openrgb.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
openrgb
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Set RGB perhipherals to white
|
||||||
|
${pkgs.openrgb}/bin/openrgb -c white -m static &
|
||||||
|
'';
|
||||||
|
}
|
14
maddie/passwords.nix
Normal file
14
maddie/passwords.nix
Normal 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";
|
||||||
|
};
|
||||||
|
}
|
11
maddie/pcmanfm.nix
Normal file
11
maddie/pcmanfm.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pcmanfm
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.configFile."pcmanfm" = {
|
||||||
|
source = ./pcmanfm;
|
||||||
|
};
|
||||||
|
}
|
26
maddie/pcmanfm/default/pcmanfm.conf
Normal file
26
maddie/pcmanfm/default/pcmanfm.conf
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[config]
|
||||||
|
bm_open_method=0
|
||||||
|
|
||||||
|
[volume]
|
||||||
|
mount_on_startup=1
|
||||||
|
mount_removable=1
|
||||||
|
autorun=1
|
||||||
|
|
||||||
|
[ui]
|
||||||
|
always_show_tabs=0
|
||||||
|
max_tab_chars=32
|
||||||
|
win_width=1000
|
||||||
|
win_height=696
|
||||||
|
splitter_pos=189
|
||||||
|
media_in_new_tab=0
|
||||||
|
desktop_folder_new_win=0
|
||||||
|
change_tab_on_drop=1
|
||||||
|
close_on_unmount=1
|
||||||
|
focus_previous=0
|
||||||
|
side_pane_mode=places
|
||||||
|
view_mode=list
|
||||||
|
show_hidden=0
|
||||||
|
sort=name;descending;
|
||||||
|
toolbar=newtab;navigation;home;
|
||||||
|
show_statusbar=1
|
||||||
|
pathbar_mode_buttons=0
|
24
maddie/picom.nix
Normal file
24
maddie/picom.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Import xorg environment into systemd for the picom service to work
|
||||||
|
systemctl --user import-environment XAUTHORITY DISPLAY &
|
||||||
|
|
||||||
|
# Restart picom after importing the xorg environment
|
||||||
|
systemctl --user restart picom &
|
||||||
|
'';
|
||||||
|
services.picom = {
|
||||||
|
enable = true;
|
||||||
|
fade = true;
|
||||||
|
fadeSteps = [
|
||||||
|
0.1
|
||||||
|
0.1
|
||||||
|
];
|
||||||
|
opacityRules = [
|
||||||
|
"90:class_g = 'st-256color'"
|
||||||
|
];
|
||||||
|
shadow = true;
|
||||||
|
vSync = true;
|
||||||
|
};
|
||||||
|
}
|
9
maddie/processes.nix
Normal file
9
maddie/processes.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xorg.xkill # Kill X11 programs with mouse
|
||||||
|
killall # Kill programs
|
||||||
|
gotop # Process manager in go
|
||||||
|
];
|
||||||
|
}
|
11
maddie/qt.nix
Normal file
11
maddie/qt.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
style = {
|
||||||
|
package = pkgs.adwaita-qt;
|
||||||
|
name = "adwaita-dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
15
maddie/rust.nix
Normal file
15
maddie/rust.nix
Normal 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 = [ "$CARGO_HOME/bin" ];
|
||||||
|
};
|
||||||
|
}
|
13
maddie/screenshot.nix
Normal file
13
maddie/screenshot.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
tesseract5 # Gets text from images
|
||||||
|
maim # X11 screenshot tool
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/sst" = {
|
||||||
|
source = ./screenshot/sst.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
40
maddie/screenshot/sst.sh
Normal file
40
maddie/screenshot/sst.sh
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Configuration variables
|
||||||
|
SST_PIC_DIR="$HOME/Pictures/Screenshots"
|
||||||
|
|
||||||
|
while getopts "sctd:" options; do
|
||||||
|
case $options in
|
||||||
|
s)
|
||||||
|
echo "sswm: save mode"
|
||||||
|
name=$(date --iso-8601=minutes)
|
||||||
|
maim -s -u -f png > $SST_PIC_DIR/$name.png
|
||||||
|
echo "sswm: imaged saved as $SST_PIC_DIR/$name.png"
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
echo "sswm: copy mode"
|
||||||
|
maim -s -u -f png | xclip -selection clipboard -t image/png
|
||||||
|
echo "sswm: image copied to clipboard"
|
||||||
|
;;
|
||||||
|
t)
|
||||||
|
echo "sswm: text mode"
|
||||||
|
maim -s -u -f png "$IMAGE"
|
||||||
|
[ $? -ne 0 ] && exit 1
|
||||||
|
|
||||||
|
tesseract "$IMAGE" "${TEXT//\.txt/}" 2> /dev/null
|
||||||
|
sed -i 's/\x0c//' "$TEXT"
|
||||||
|
|
||||||
|
if [ $(wc -l < $TEXT) -eq 0 ]; then
|
||||||
|
echo "sswm: no text detected"
|
||||||
|
else
|
||||||
|
truncate -s -1 $TEXT
|
||||||
|
xclip -selection clipboard < "$TEXT"
|
||||||
|
echo "sswm: text copied to clipboard"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
echo "sswm: delay "$OPTARG"s..."
|
||||||
|
sleep $OPTARG
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
62
maddie/shell.nix
Normal file
62
maddie/shell.nix
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home = {
|
||||||
|
# Aliases
|
||||||
|
shellAliases = {
|
||||||
|
# Core Programs
|
||||||
|
ls = "ls -lhN --color=auto --group-directories-first";
|
||||||
|
ll = "ls -av";
|
||||||
|
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";
|
||||||
|
sx = "startx ~/.config/x11/xinitrc";
|
||||||
|
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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
22
maddie/slstatus.nix
Normal file
22
maddie/slstatus.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
slstatus
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Start slstatus
|
||||||
|
${pkgs.slstatus}/bin/slstatus &
|
||||||
|
'';
|
||||||
|
|
||||||
|
home.file.".local/bin/statusbar" = {
|
||||||
|
source = ./statusbar;
|
||||||
|
recursive = true;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [
|
||||||
|
"$HOME/.local/bin/statusbar"
|
||||||
|
];
|
||||||
|
}
|
7
maddie/smart-home.nix
Normal file
7
maddie/smart-home.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
home-assistant-cli
|
||||||
|
];
|
||||||
|
}
|
25
maddie/ssh.nix
Normal file
25
maddie/ssh.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ config, pkgs, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Drawterm
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
drawterm
|
||||||
|
];
|
||||||
|
|
||||||
|
# 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
1
maddie/ssh/id_ed25519_sk.pub
Normal file
1
maddie/ssh/id_ed25519_sk.pub
Normal file
@ -0,0 +1 @@
|
|||||||
|
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA1jTkcMhBQQoYqNVLofrNnTbB8RCyzSYmdsnPeoOineAAAABHNzaDo= spy@luna (yubikey)
|
3
maddie/statusbar/sb-clock
Executable file
3
maddie/statusbar/sb-clock
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo " $(date "+%a %d %b") $(date "+%I:%M:%S%p")"
|
6
maddie/statusbar/sb-cpu
Executable file
6
maddie/statusbar/sb-cpu
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cpu=$(top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f\n", prefix, 100 - v }' | awk '{print int($0)}')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $cpu%"
|
7
maddie/statusbar/sb-disk
Executable file
7
maddie/statusbar/sb-disk
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
disk=$(df -h "/" | awk ' /[0-9]/ {print $3 "/" $2}')
|
||||||
|
percent=$(df -h "/" | egrep -o '[0-9]+%' | awk '{print int($0)}')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $disk"
|
35
maddie/statusbar/sb-forecast
Executable file
35
maddie/statusbar/sb-forecast
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Displays todays precipication chance (☔) and daily low (🥶) and high (🌞).
|
||||||
|
# Usually intended for the statusbar.
|
||||||
|
|
||||||
|
# If we have internet, get a weather report from wttr.in and store it locally.
|
||||||
|
# You could set up a shell alias to view the full file in a pager in the
|
||||||
|
# terminal if desired. This function will only be run once a day when needed.
|
||||||
|
weatherreport="${XDG_DATA_HOME:-$HOME/.local/share}/weatherreport"
|
||||||
|
getforecast() { curl -sf "wttr.in/$LOCATION" > "$weatherreport" || exit 1 ;}
|
||||||
|
|
||||||
|
# Some very particular and terse stream manipulation. We get the maximum
|
||||||
|
# precipitation chance and the daily high and low from the downloaded file and
|
||||||
|
# display them with coresponding emojis.
|
||||||
|
showweather() { printf "%s" "$(sed '16q;d' "$weatherreport" |
|
||||||
|
grep -wo "[0-9]*%" | sort -rn | sed "s/^/☔/g;1q" | tr -d '\n')"
|
||||||
|
sed '13q;d' "$weatherreport" | grep -o "m\\([-+]\\)*[0-9]\\+" | sed 's/+//g' | sort -n -t 'm' -k 2n | sed -e 1b -e '$!d' | tr '\n|m' ' ' | awk '{print " 🥶" $1 "°","🌞" $2 "°"}' ;}
|
||||||
|
|
||||||
|
case BLOCK_BUTTON in
|
||||||
|
1) setsid -f "$TERMINAL" -e less -Srf "$weatherreport" ;;
|
||||||
|
2) getforecast && showweather ;;
|
||||||
|
3) notify-send "🌈 Weather module" "\- Left click for full forecast.
|
||||||
|
- Middle click to update forecast.
|
||||||
|
☔: Chance of rain/snow
|
||||||
|
🥶: Daily low
|
||||||
|
🌞: Daily high" ;;
|
||||||
|
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# The test if our forcecast is updated to the day. If it isn't download a new
|
||||||
|
# weather report from wttr.in with the above function.
|
||||||
|
[ "$(stat -c %y "$weatherreport" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] ||
|
||||||
|
getforecast
|
||||||
|
|
||||||
|
showweather
|
10
maddie/statusbar/sb-iplocate
Executable file
10
maddie/statusbar/sb-iplocate
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Gets your public ip address checks which country you are in and
|
||||||
|
# displays that information in the statusbar
|
||||||
|
#
|
||||||
|
# https://www.maketecheasier.com/ip-address-geolocation-lookups-linux/
|
||||||
|
|
||||||
|
ifinstalled "geoip" || exit
|
||||||
|
addr="$(curl ifconfig.me 2>/dev/null)" || exit
|
||||||
|
grep "flag: " "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji" | grep "$(geoiplookup "$addr" | sed 's/.*, //')" | sed "s/flag: //;s/;.*//"
|
5
maddie/statusbar/sb-kernel
Executable file
5
maddie/statusbar/sb-kernel
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
kernel=$(uname -r)
|
||||||
|
icon=""
|
||||||
|
echo "$icon $kernel"
|
7
maddie/statusbar/sb-memory
Executable file
7
maddie/statusbar/sb-memory
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
mem=$(free --mebi | sed -n '2{p;q}' | awk '{printf ("%2.2f/%2.2f", ( $3 / 1024), ($2 / 1024))}')
|
||||||
|
percent=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }' | awk '{print int($0)}')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $mem""GB"
|
13
maddie/statusbar/sb-temp
Executable file
13
maddie/statusbar/sb-temp
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
temp=$(sensors | awk '/Core 0/ {print $3}' | awk '{print int($0)}')
|
||||||
|
|
||||||
|
if [ $temp -ge 70 ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ $temp -ge 50 ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ $temp -ge 0 ]; then
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$icon $temp°C"
|
6
maddie/statusbar/sb-uptime
Executable file
6
maddie/statusbar/sb-uptime
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
uptime=$(uptime | awk '{print $3}' | sed 's/,//')
|
||||||
|
icon=""
|
||||||
|
|
||||||
|
echo "$icon $uptime"
|
15
maddie/statusbar/sb-volume
Executable file
15
maddie/statusbar/sb-volume
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
vol="$(pamixer --get-volume)"
|
||||||
|
|
||||||
|
if [ $(pamixer --get-mute) = true ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ "$vol" -ge "50" ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ "$vol" -gt "0" ]; then
|
||||||
|
icon=""
|
||||||
|
elif [ "$vol" -eq "0" ]; then
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$icon $vol%"
|
13
maddie/steam.nix
Normal file
13
maddie/steam.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ config, pkgs, ...}:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
steam
|
||||||
|
steam-run
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".local/bin/steam-killer" = {
|
||||||
|
source = ./steam/steam-killer.sh;
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
}
|
9
maddie/steam/steam-killer.sh
Executable file
9
maddie/steam/steam-killer.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
echo "[sk] killing steamwebhelper"
|
||||||
|
{ kill $(pidof steamwebhelper) && echo "[fhs] killed!"; } || echo "[fhs] failed!"
|
||||||
|
echo "[sk] waiting 0.5 seconds..."
|
||||||
|
sleep 0.5
|
||||||
|
done
|
9
maddie/terminal.nix
Normal file
9
maddie/terminal.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
cool-retro-term # Retro-style terminal
|
||||||
|
kitty # Used for testing
|
||||||
|
st # Suckless terminal
|
||||||
|
];
|
||||||
|
}
|
9
maddie/virtualisation.nix
Normal file
9
maddie/virtualisation.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
virt-manager # Manages QEMU virtual machines
|
||||||
|
bottles # GTK interface for wine
|
||||||
|
wine # Windows emulation
|
||||||
|
];
|
||||||
|
}
|
73
maddie/xdg.nix
Normal file
73
maddie/xdg.nix
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xdg-utils
|
||||||
|
xdg-user-dirs
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg = {
|
||||||
|
enable = true;
|
||||||
|
userDirs.enable = true;
|
||||||
|
desktopEntries = {
|
||||||
|
"browser" = {
|
||||||
|
name = "Web Browser";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.librewolf}/bin/librewolf %f";
|
||||||
|
};
|
||||||
|
"image" = {
|
||||||
|
name = "Image Viewer";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.nsxiv}/bin/nsxiv -a %f";
|
||||||
|
};
|
||||||
|
"text" = {
|
||||||
|
name = "Text Editor";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.st}/bin/st -e ${pkgs.neovim}/bin/nvim %u";
|
||||||
|
};
|
||||||
|
"pdf" = {
|
||||||
|
name = "PDF Reader";
|
||||||
|
type = "Application";
|
||||||
|
exec = "${pkgs.zathura}/bin/zathura %u";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {
|
||||||
|
"application/pdf" = "pdf.desktop";
|
||||||
|
"x-scheme-handler/http" = "browser.desktop";
|
||||||
|
"x-scheme-handler/https" = "browser.desktop";
|
||||||
|
"image/png" = "image.desktop";
|
||||||
|
"image/jpeg" = "image.desktop";
|
||||||
|
"image/jpg" = "image.desktop";
|
||||||
|
"image/gif" = "image.desktop";
|
||||||
|
"video/mp4" = "mpv.desktop";
|
||||||
|
"text/plain" = "text.desktop";
|
||||||
|
"text/html" = "browser.desktop";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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";
|
||||||
|
|
||||||
|
# Default programs
|
||||||
|
EDITOR = "nvim";
|
||||||
|
TERMINAL = "st";
|
||||||
|
BROWSER = "librewolf";
|
||||||
|
};
|
||||||
|
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
58
maddie/xorg.nix
Normal file
58
maddie/xorg.nix
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Run startx on tty1
|
||||||
|
programs.zsh.profileExtra = ''
|
||||||
|
# If on /dev/tty1 then run startx automatically
|
||||||
|
if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then
|
||||||
|
exec ${pkgs.xorg.xinit}/bin/startx
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Attempt to set keyboard layout
|
||||||
|
home.keyboard = {
|
||||||
|
layout = "gb";
|
||||||
|
options = [
|
||||||
|
"caps:escape"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Attempt to set cursor
|
||||||
|
home.pointerCursor = {
|
||||||
|
gtk.enable = true;
|
||||||
|
x11.enable = true;
|
||||||
|
package = pkgs.phinger-cursors;
|
||||||
|
name = "phinger-cursors";
|
||||||
|
size = 24;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Force use of XDG Dir Spec
|
||||||
|
home.sessionVariables = {
|
||||||
|
/* XAUTHORITY = "${config.xdg.runtimeDir}/Xauthority"; */
|
||||||
|
XCOMPOSECACHE = "${config.xdg.cacheHome}/x11/xcompose";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Configure ~/.xinitrc
|
||||||
|
programs.feh.enable = true;
|
||||||
|
home.file.".xinitrc".text = ''
|
||||||
|
# Monitor configuration
|
||||||
|
${pkgs.xorg.xrandr}/bin/xrandr --output DP-0 --primary --mode 2560x1440 --pos 0x560
|
||||||
|
${pkgs.xorg.xrandr}/bin/xrandr --output HDMI-0 --noprimary --mode 2560x1440 --pos 2560x0 --rotate right
|
||||||
|
|
||||||
|
# Speed up repeated keypresses
|
||||||
|
${pkgs.xorg.xset}/bin/xset r rate 300 50
|
||||||
|
|
||||||
|
# Set keyboard map and remap caps to escape
|
||||||
|
${pkgs.xorg.setxkbmap}/bin/setxkbmap -layout gb --option caps:escape
|
||||||
|
|
||||||
|
# Apply wallpaper
|
||||||
|
${pkgs.feh}/bin/feh --no-fehbg --bg-fill "$HOME/Pictures/Wallpapers/The Walking Dead/shane_1.jpg" --bg-fill "$HOME/Pictures/Wallpapers/The Walking Dead/shane_3.jpg"
|
||||||
|
|
||||||
|
# Start the window manager
|
||||||
|
${pkgs.openssh}/bin/ssh-agent ${pkgs.dbus}/bin/dbus-run-session ${pkgs.dwm}/bin/dwm
|
||||||
|
'';
|
||||||
|
|
||||||
|
xresources.properties = {
|
||||||
|
"*.font" = "Iosevka:pixelsize=14:antialias=true:autohint=true";
|
||||||
|
};
|
||||||
|
}
|
5
maddie/zathura.nix
Normal file
5
maddie/zathura.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zathura.enable = true;
|
||||||
|
}
|
8
maddie/zoxide.nix
Normal file
8
maddie/zoxide.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zoxide = {
|
||||||
|
enable = true;
|
||||||
|
options = [ "--cmd=cd" ];
|
||||||
|
};
|
||||||
|
}
|
123
maddie/zsh.nix
Normal file
123
maddie/zsh.nix
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.zsh = {
|
||||||
|
# Use the zsh shell
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Basic config settings
|
||||||
|
enableAutosuggestions = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
enableSyntaxHighlighting = 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
54
overlays.nix
Normal file
54
overlays.nix
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
[
|
||||||
|
# My build of suckless dwm
|
||||||
|
(final: prev: {
|
||||||
|
dwm = prev.dwm.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "dwm";
|
||||||
|
rev = "a8c4c51946229f792e8621bde44a7001f7977dc7";
|
||||||
|
sha256 = "sha256-7zbUmDVC2QfiZ4SP9fJbiqxQm7X62dlixL1hRR8zv+k=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
st = prev.st.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "st";
|
||||||
|
rev = "22e582e5acf6e4eb52c57df51f59f84bbb7d2f13";
|
||||||
|
sha256 = "sha256-ko4be6N/igCMo28/as/AWKMYswm/jIH1ILeVoi2Gpx8=";
|
||||||
|
};
|
||||||
|
buildInputs = oldAttrs.buildInputs ++ [ final.harfbuzz ];
|
||||||
|
});
|
||||||
|
dmenu = prev.dmenu.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "dmenu";
|
||||||
|
rev = "82156146b3f3ab720ac752a953b952d638e1f935";
|
||||||
|
sha256 = "sha256-L6aqP7wmegl6Jv4ytMw/j1FwH5lXv8QjWOY5mHotkxI=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
slstatus = prev.slstatus.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "slstatus";
|
||||||
|
rev = "b22f3d8ec8e2d67bbd32f02721d9d8157a46edd4";
|
||||||
|
sha256 = "sha256-OhssKVQArcQAgCavkFaCRvxUM3689t1v3YCv9IW7osU=";
|
||||||
|
};
|
||||||
|
});
|
||||||
|
slock = prev.slock.overrideAttrs (oldAttrs: {
|
||||||
|
src = final.fetchFromGitHub {
|
||||||
|
owner = "SpyHoodle";
|
||||||
|
repo = "slock";
|
||||||
|
rev = "e71c4ac0106a438abb5acf4ae89b8518a9bf3682";
|
||||||
|
sha256 = "sha256-7ZeARKljyQSHPoFb+6p50uIr2q5VOqE/XSELqurNMBw=";
|
||||||
|
};
|
||||||
|
buildInputs = oldAttrs.buildInputs ++ [ final.xorg.libXpm ];
|
||||||
|
});
|
||||||
|
ncmpcpp = prev.ncmpcpp.override {
|
||||||
|
visualizerSupport = true;
|
||||||
|
clockSupport = true;
|
||||||
|
};
|
||||||
|
nerdfonts = prev.nerdfonts.override {
|
||||||
|
fonts = [ "Iosevka" "Terminus" ];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]
|
5
system/android.nix
Normal file
5
system/android.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.adb.enable = true;
|
||||||
|
}
|
14
system/audio.nix
Normal file
14
system/audio.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
sound.enable = true;
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
};
|
||||||
|
}
|
6
system/bluetooth.nix
Normal file
6
system/bluetooth.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
services.blueman.enable = true;
|
||||||
|
}
|
31
system/boot.nix
Normal file
31
system/boot.nix
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{ config, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
# Setup bootloader
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
||||||
|
|
||||||
|
# Setup crypto keyfile
|
||||||
|
boot.initrd.secrets = {
|
||||||
|
"/crypto_keyfile.bin" = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable LUKS boot devices
|
||||||
|
boot.initrd.luks.devices."luks-c180a121-376a-432e-a661-f4be3cc23dfa".device = "/dev/disk/by-uuid/c180a121-376a-432e-a661-f4be3cc23dfa";
|
||||||
|
boot.initrd.luks.devices."luks-16dda63d-9dce-4ef2-9da6-ee458ba3c44c".device = "/dev/disk/by-uuid/16dda63d-9dce-4ef2-9da6-ee458ba3c44c";
|
||||||
|
boot.initrd.luks.devices."luks-c180a121-376a-432e-a661-f4be3cc23dfa".keyFile = "/crypto_keyfile.bin";
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
# Use the linux-zen kernel
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_zen;
|
||||||
|
}
|
6
system/cpu.nix
Normal file
6
system/cpu.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
24
system/disks.nix
Normal file
24
system/disks.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
fileSystems."/" =
|
||||||
|
{
|
||||||
|
device = "/dev/disk/by-uuid/0eecf0db-00f9-48db-9d62-0ade3f3edd90";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot/efi" =
|
||||||
|
{
|
||||||
|
device = "/dev/disk/by-uuid/0042-9914";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/mnt/data" =
|
||||||
|
{
|
||||||
|
device = "/dev/disk/by-uuid/5c0f035b-fe9e-4c7f-a137-34b0168e1dde";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[{ device = "/dev/disk/by-uuid/9be243bf-4f48-42e3-9827-bba2ef04ffa4"; }];
|
||||||
|
}
|
13
system/doas.nix
Normal file
13
system/doas.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ config, username, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
security.sudo.enable = false;
|
||||||
|
security.doas = {
|
||||||
|
enable = true;
|
||||||
|
extraRules = [{
|
||||||
|
users = [ "${username}" ];
|
||||||
|
keepEnv = true;
|
||||||
|
persist = true;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
}
|
6
system/firewall.nix
Normal file
6
system/firewall.nix
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Disable the firewall altogether
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
}
|
17
system/fonts.nix
Normal file
17
system/fonts.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
fonts.fonts = with pkgs; [
|
||||||
|
terminus-nerdfont
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
dina-font
|
||||||
|
iosevka
|
||||||
|
jetbrains-mono
|
||||||
|
font-awesome
|
||||||
|
source-han-sans
|
||||||
|
source-han-serif
|
||||||
|
source-han-code-jp
|
||||||
|
nerdfonts
|
||||||
|
];
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user