refactor: make modules independant and exposed in the flake for outside use

This commit is contained in:
matt1432 2024-08-02 22:32:29 -04:00
commit 24aa4b9842
217 changed files with 2213 additions and 1954 deletions

View file

@ -0,0 +1,23 @@
{pkgs, ...}: {
config = {
programs.bash.shellAliases = {
# https://wiki.hyprland.org/Contributing-and-Debugging/#lsp-and-formatting
"mkCMakeFiles" = "cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON";
};
home.packages = [
(pkgs.writeShellScriptBin "testChanges" ''
rm -r /home/matt/git/$1/$2/{.cache,build}
nix flake update "$1"
nh os switch
(
cd "/home/matt/git/$1/$2"
nix develop /home/matt/git/$1 -c cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
)
'')
];
};
# For accurate stack trace
_file = ./dev.nix;
}

View file

@ -0,0 +1,93 @@
{
lib,
osConfig,
...
}: {
config = let
cfg = osConfig.roles.desktop;
in {
programs = {
# https://codeberg.org/dnkl/foot/wiki#spawning-new-terminal-instances-in-the-current-working-directory
bash.bashrcExtra =
# bash
''
osc7_cwd() {
local strlen=''${#PWD}
local encoded=""
local pos c o
for (( pos=0; pos<strlen; pos++ )); do
c=''${PWD:$pos:1}
case "$c" in
[-/:_.!\'\(\)~[:alnum:]] ) o="$c" ;;
* ) printf -v o '%%%02X' "'$c" ;;
esac
encoded+="''${o}"
done
printf '\e]7;file://%s%s\e\\' "''${HOSTNAME}" "''${encoded}"
}
PROMPT_COMMAND=''${PROMPT_COMMAND:+$PROMPT_COMMAND; }osc7_cwd
'';
foot = {
enable = true;
settings = {
main = {
term = "xterm-256color";
font = "${cfg.fontName}:size=${
lib.strings.floatToString cfg.fontSize
}";
pad = "0x10";
};
key-bindings = {
spawn-terminal = "Control+Shift+Return";
};
bell = {
urgent = false;
notify = false;
visual = false;
command = null;
command-focused = false;
};
colors = {
# BG transparency
alpha = 0.8;
background = "282a36";
foreground = "f8f8f2";
regular0 = "21222c"; # black
regular1 = "ff5555"; # red
regular2 = "50fa7b"; # green
regular3 = "f1fa8c"; # yellow
regular4 = "bd93f9"; # blue
regular5 = "ff79c6"; # magenta
regular6 = "8be9fd"; # cyan
regular7 = "f8f8f2"; # white
bright0 = "6272a4"; # bright black
bright1 = "ff6e6e"; # bright red
bright2 = "69ff94"; # bright green
bright3 = "ffffa5"; # bright yellow
bright4 = "d6acff"; # bright blue
bright5 = "ff92df"; # bright magenta
bright6 = "a4ffff"; # bright cyan
bright7 = "ffffff"; # bright white
selection-foreground = "ffffff";
selection-background = "44475a";
urls = "8be9fd";
};
};
};
};
};
# For accurate stack trace
_file = ./foot.nix;
}

View file

@ -0,0 +1,30 @@
hyprland-plugins: {pkgs, ...}: {
config = {
wayland.windowManager.hyprland = {
plugins = [hyprland-plugins.packages.${pkgs.system}.hyprexpo];
settings = {
plugin = {
hyprexpo = {
columns = 3;
gap_size = 5;
bg_col = "rgb(111111)";
workspace_method = "center current"; # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = true; # laptop touchpad
gesture_fingers = 3;
gesture_distance = 300; # how far is the "max"
gesture_positive = true; # positive = swipe down. Negative = swipe up.
};
};
bind = [
"ALT, tab, hyprexpo:expo, toggle" # can be: toggle, off/disable or on/enable
];
};
};
};
# For accurate stack trace
_file = ./hyprexpo.nix;
}

View file

@ -0,0 +1,45 @@
hyprgrass: {
lib,
osConfig,
pkgs,
...
}: let
inherit (lib) mkIf;
cfg = osConfig.roles.desktop;
in {
config = mkIf cfg.isTouchscreen {
wayland.windowManager.hyprland = {
plugins = [hyprgrass.packages.${pkgs.system}.default];
settings = {
plugin = {
touch_gestures = {
# The default sensitivity is probably too low on tablet screens,
# I recommend turning it up to 4.0
sensitivity = 4.0;
# must be >= 3
workspace_swipe_fingers = 3;
experimental = {
# send proper cancel events to windows instead of hacky touch_up events,
# NOT recommended as it crashed a few times, once it's stabilized I'll make it the default
send_cancel = 0;
};
};
};
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
workspace_swipe_touch = false;
workspace_swipe_cancel_ratio = 0.15;
};
};
};
};
# For accurate stack trace
_file = ./hyprgrass.nix;
}

View file

@ -0,0 +1,62 @@
{osConfig, ...}: {
config = let
inherit (osConfig.services.xserver) xkb;
inherit (osConfig.roles.desktop) mainMonitor;
miceNames = [
"logitech-g502-x"
"logitech-g502-hero-gaming-mouse"
];
mkConf = name: {
inherit name;
sensitivity = 0;
accel_profile = "flat";
};
in {
wayland.windowManager.hyprland = {
settings = {
device = map (d: (mkConf d)) miceNames;
cursor = {
no_hardware_cursors = osConfig.nvidia.enable;
hide_on_touch = true;
};
exec-once =
if mainMonitor != null
then ["hyprctl dispatch focusmonitor ${mainMonitor}"]
else [];
input = {
# Keyboard
kb_layout = xkb.layout;
kb_variant = xkb.variant;
numlock_by_default = true;
repeat_rate = 25;
# Mouse
follow_mouse = true;
# Touchpad
touchpad = {
natural_scroll = true;
disable_while_typing = false;
drag_lock = true;
tap-and-drag = true;
};
};
bind = [
",XF86AudioPlay, exec, playerctl play-pause"
",XF86AudioStop, exec, playerctl stop"
",XF86AudioNext, exec, playerctl next"
",XF86AudioPrev, exec, playerctl previous"
];
};
};
};
# For accurate stack trace
_file = ./inputs.nix;
}

View file

@ -0,0 +1,63 @@
self: {pkgs, ...}: {
config = let
inherit (self.legacyPackages.${pkgs.system}) mpvScripts;
in {
# For kdialog-open-files
home.packages = with pkgs; [
kdialog
];
programs.mpv = {
enable = true;
# https://github.com/mpv-player/mpv/wiki/User-Scripts
scripts = with mpvScripts; [
modernx
# Dep of touch-gestures
pointer-event
touch-gestures
# Ctrl + o
kdialog-open-files
persist-properties
undo-redo
];
scriptOpts = {
persist_properties = {
properties = "volume,sub-scale";
};
# Touch gestures default
pointer-event = {
margin_left = 0;
margin_right = 80;
margin_top = 50;
margin_bottom = 130;
ignore_left_single_long_while_window_dragging = true;
left_single = "cycle pause";
left_double = "script-message-to touch_gestures double";
left_long = "script-binding uosc/menu-blurred";
left_drag_start = "script-message-to touch_gestures drag_start";
left_drag_end = "script-message-to touch_gestures drag_end";
left_drag = "script-message-to touch_gestures drag";
};
touch-gestures = {
# valid options are:
# 'playlist' for changing the playlist item by swiping
# 'seek' for seeking by dragging
horizontal_drag = "seek";
# scale seeking based on the duration of the video
proportional_seek = true;
# scale factor for seeking
seek_scale = 1;
};
};
};
};
# For accurate stack trace
_file = ./mpv.nix;
}

View file

@ -0,0 +1,20 @@
self: {pkgs, ...}: let
inherit (self.inputs) nixpkgs-wayland;
in {
config = let
waypkgs = nixpkgs-wayland.packages.${pkgs.system};
in {
programs = {
obs-studio = {
enable = true;
plugins = [
waypkgs.obs-wlrobs
pkgs.obs-studio-plugins.droidcam-obs
];
};
};
};
# For accurate stack trace
_file = ./obs.nix;
}

View file

@ -0,0 +1,57 @@
self: {
config,
lib,
pkgs,
...
}: {
imports = [
(import ../../home/theme self)
(import ../../home/hyprpaper.nix self)
];
config = let
inherit (lib) mkIf;
cursorTheme = self.legacyPackages.${pkgs.system}.dracula.hyprcursor;
cursorThemeName = "Dracula-cursors";
hyprcursorThemeName = "Dracula-hyprcursor";
cursorSize = "24";
in {
home.file.".local/share/icons/${hyprcursorThemeName}".source = cursorTheme;
wayland.windowManager.hyprland = {
settings =
{
envd = [
"XCURSOR_THEME, ${cursorThemeName}"
"XCURSOR_SIZE, ${cursorSize}"
];
exec-once = [
"hyprctl setcursor ${hyprcursorThemeName} ${cursorSize}"
];
windowrule = [
"size 1231 950,title:^(Open Folder)$"
"float,title:^(Open Folder)$"
"size 1231 950,title:^(Open File)$"
"float,title:^(Open File)$"
];
layerrule = [
"noanim, selection"
];
}
// (
mkIf (config.home.username != "greeter") {
# This file should only be used for theming
source = ["${config.vars.configDir}/hypr/main.conf"];
}
);
};
};
# For accurate stack trace
_file = ./style.nix;
}