diff --git a/.sops.yaml b/.sops.yaml index 3815c26..6034950 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -2,7 +2,6 @@ keys: - &admin_torjus age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u - &server_gunter age1whxf34vjdndqzwgm7yyaexdm46gdnv9sf3nal7qqyjr0nyhhndlsrmc0g3 - &server_magicman age1stlqqspmt5fepyz35udrwr5avf9zuju79f787p26pu2d2j08yqps2q2t2c - - &server_prismo age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini|toml) key_groups: @@ -19,11 +18,6 @@ creation_rules: - age: - *admin_torjus - *server_magicman - - path_regex: secrets/prismo/[^/]+\.(yaml|json|env|ini|toml) - key_groups: - - age: - - *admin_torjus - - *server_prismo - path_regex: secrets/torjus/[^/]+\.(yaml|json|env|ini|toml) key_groups: - age: diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..5e8df63 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,71 @@ +# AGENTS.md + +## Overview +This repository contains NixOS configurations for multiple machines using flakes, home-manager, and sops-nix for secrets. + +## Working with this Repository + +### DO +- Use `nix fmt` or `nix fmt .` to format files before committing (uses nixfmt-tree) +- Test builds with `nix build .#nixosConfigurations..config.system.build.toplevel` +- Use the included devShell run `nix develop` to get formatting and linting tools +- When adding packages, check both overlays in `flake.nix` and `home/programs/` +- Follow the directory structure: `hosts/` for system configs, `home/` for home-manager configs +- **CRITICAL: When adding NEW files, run `git add ` BEFORE building. Nix flakes ignore untracked files in the build context, so newly added files won't be copied and builds will fail until they're git-tracked** + +### DON'T +- Don't work directly on master branch, always create a new branch if editing something +- Don't run `nix flake update` to update inputs, this should only be done by the user manually +- Don't directly edit files in `secrets/` - they should be manually managed by the user +- Don't add secrets to Git +- Don't format with tools other than `nix fmt` (the formatter is defined in flake.nix) +- Don't modify `.sops.yaml` or any secrets, ask the user to do it manually +- Don't use `nix-shell` directly - use `nix develop` for the devShell environment +- Don't skip builds after configuration changes - test before pushing +- Don't mix stable and unstable packages arbitrarily in the same expression +- Don't commit without running `nix fmt` - formatted Nix is required +- **Don't try to build with newly created but untracked files - `nix build` will fail to find them** + +## Specific Patterns + +### Adding a New Program +- DO add to `home/packages` if no nixos or home-manager options are used. +- DO create a subdirectory in `home/programs/` if nixos or home-manager options are used. +- DO `git add` the new configuration files before attempting to build +- DON'T add programs directly to user configs unless absolutely necessary + +### Modifying System Configuration +- DO check `system/` for shared configs across hosts +- DO check individual `hosts//` for host-specific overrides +- DON'T duplicate configuration - use `system/` modules for shared settings + +### Working with Secrets +- DON'T add unencrypted secrets to the repository +- DON'T commit decrypted secrets +- DON'T add secrets, ask the user do it themselves + +### Testing +- DO run `nix build .#nixosConfigurations..config.system.build.toplevel` to test +- DON'T push untested configuration changes +- DON'T attempt to build configurations with newly added but untracked files + +### Git +If change is small, and can be described sufficiently in the summary, dont add a long +body to the commit, prefer just the summary if sufficient. + +Commits should match the format: +`topic: description of change` + +Some examples: +- hyprland: convert deprecated windowrules +- packages: nixfmt-rfc-style renamed +- gunter: use beta nvidia driver + + +## Repository Structure Guide +- `flake.nix` - Entrypoint, inputs, overlays, and configurations +- `hosts/` - System-level NixOS configs per host +- `home/` - Home-manager configs (programs, editor, window managers) +- `system/` - Shared system modules (fonts, security, services) +- `secrets/` - Encrypted secrets (managed by sops-nix) +- `scripts/` - Utility scripts diff --git a/README.md b/README.md index 3945bf7..1fc7696 100644 --- a/README.md +++ b/README.md @@ -4,5 +4,4 @@ Configurations for: * gunter * magicman -* prismo diff --git a/home/hosts/gunter/default.nix b/home/hosts/gunter/default.nix index 921f528..c7a0bb1 100644 --- a/home/hosts/gunter/default.nix +++ b/home/hosts/gunter/default.nix @@ -18,7 +18,7 @@ imports = [ inputs.sops-nix.homeManagerModules.sops ../../editor/neovim - ../../hyprland/gunter.nix + ../../hyprland ../../packages ../../programs/dunst ../../programs/git @@ -26,6 +26,7 @@ ../../programs/kitty ../../programs/obs-studio ../../programs/rofi + ../../programs/streamcontroller ../../programs/tmux ../../programs/vscode ../../scripts @@ -36,9 +37,68 @@ ../../ssh ../../zsh ]; + firefox.enable = true; tmux.enable = true; hyprland.enable = true; + + hyprland.monitors = [ + "$mon_top,1920x1080@60,2560x0,1" + "$mon_left,2560x1440@75,0x1080,1" + "$mon_center,2560x1440@120,2560x1080,1" + "$mon_right,2560x1440@75,5120x1080,1" + ]; + + hyprland.extraEnv = [ + "LIBVA_DRIVER_NAME,nvidia" + "GBM_BACKEND,nvidia-drm" + "WLR_NO_HARDWARE_CURSORS,1" + ]; + + hyprland.enableGrimblast = true; + streamcontroller.enable = true; + hyprland.enableWacom = true; + hyprland.cursorNoHardware = true; + + hyprland.extraWorkspaces = [ + "name:T1, monitor:$mon_top, persistent:true, default:true" + "name:T2, monitor:$mon_top, persistent:true, default:false" + "name:L1, monitor:$mon_left, persistent:true, default:true" + "name:L2, monitor:$mon_left, persistent:true, default:false" + "name:R1, monitor:$mon_right, persistent:true, default:true" + "name:R2, monitor:$mon_right, persistent:true, default:false" + "name:c1, monitor:$mon_center, persistent:true, default:true" + "name:c2, monitor:$mon_center, persistent:true, default:false" + "name:c3, monitor:$mon_center, persistent:true, default:false" + "name:c4, monitor:$mon_center, persistent:true, default:false" + ]; + + hyprland.monitorVariables = { + "$mon_top" = "desc:BNQ G2420HDBL T2B04424SL000"; + "$mon_left" = "desc:Samsung Electric Company LS27A600U HNMT502389"; + "$mon_center" = "desc:Acer Technologies XB271HU #ASPVEKfgZ8Dd"; + "$mon_right" = "desc:Samsung Electric Company LS27A600U HNMT502390"; + }; + + hyprland.extraKeybinds = [ + "$mainMod,Print,exec,grimblast save active ~/tmp/$(date -Iseconds).png" + "$shiftMainMod,Print,exec,grimblast copy area" + ",Print,exec,grimblast copy active" + "$mainMod,v,exec,sleep 0.5s && wl-paste | wtype -" + # Workspace keybinds + "$mainMod,1,workspace,name:c1" + "$mainMod,2,workspace,name:c2" + "$mainMod,3,workspace,name:c3" + "$mainMod,4,workspace,name:c4" + "$mainMod,5,workspace,5" + "$mainMod,6,workspace,6" + "$shiftMainMod,1,movetoworkspace,name:c1" + "$shiftMainMod,2,movetoworkspace,name:c2" + "$shiftMainMod,3,movetoworkspace,name:c3" + "$shiftMainMod,4,movetoworkspace,name:c4" + "$shiftMainMod,5,movetoworkspace,5" + "$shiftMainMod,6,movetoworkspace,6" + ]; home = { username = "${user}"; homeDirectory = "/home/${user}"; diff --git a/home/hosts/magicman/default.nix b/home/hosts/magicman/default.nix index e07bae6..174decc 100644 --- a/home/hosts/magicman/default.nix +++ b/home/hosts/magicman/default.nix @@ -31,12 +31,28 @@ ../../scripts/batlvl.nix ../../zsh ../../packages - ../../hyprland/magicman.nix + ../../hyprland ../../ssh ]; firefox.enable = true; tmux.enable = true; hyprland.enable = true; + hyprland.monitors = [ "eDP-1,1920x1080@60,0x0,1" ]; + hyprland.extraKeybinds = [ + # Workspace keybinds + "$mainMod,1,workspace,1" + "$mainMod,2,workspace,2" + "$mainMod,3,workspace,3" + "$mainMod,4,workspace,4" + "$mainMod,5,workspace,5" + "$mainMod,6,workspace,6" + "$shiftMainMod,1,movetoworkspace,1" + "$shiftMainMod,2,movetoworkspace,2" + "$shiftMainMod,3,movetoworkspace,3" + "$shiftMainMod,4,movetoworkspace,4" + "$shiftMainMod,5,movetoworkspace,5" + "$shiftMainMod,6,movetoworkspace,6" + ]; home = { username = "${user}"; homeDirectory = "/home/${user}"; diff --git a/home/hyprland/hyprland_magicman.nix b/home/hyprland/default.nix similarity index 62% rename from home/hyprland/hyprland_magicman.nix rename to home/hyprland/default.nix index c80a50c..005a9c4 100644 --- a/home/hyprland/hyprland_magicman.nix +++ b/home/hyprland/default.nix @@ -1,26 +1,89 @@ { pkgs, lib, + config, ... }: +with lib; +let + cfg = config.hyprland; +in { - options.hyprland.enable = lib.mkEnableOption "Hyprland"; - config = { - home.packages = with pkgs; [ - dunst - # hyprlock - hyprpaper - rofi - slurp - swww - waybar - wl-clipboard - catppuccin-cursors.macchiatoLavender - bibata-cursors - # For potentially fixing some issues - libsForQt5.qt5.qtwayland - libsForQt5.qt5ct - ]; + imports = [ ./waybar ]; + + options.hyprland = { + enable = mkEnableOption "Hyprland"; + + monitors = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "eDP-1,1920x1080@60,0x0,1" ]; + description = "Hyprland monitor configuration"; + }; + + extraEnv = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ + "LIBVA_DRIVER_NAME,nvidia" + "GBM_BACKEND,nvidia-drm" + ]; + description = "Extra environment variables for Hyprland"; + }; + + enableGrimblast = mkEnableOption "grimblast screenshot keybinds"; + + enableWacom = mkEnableOption "Wacom tablet device configuration"; + + extraKeybinds = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ + "$mainMod,Print,exec,grimblast save active ~/tmp/screenshot.png" + ]; + description = "Extra keybinds for Hyprland"; + }; + + extraWorkspaces = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ + "1, monitor:eDP-1, persistent:true, default:true" + "2, monitor:eDP-1, persistent:true" + ]; + description = "Extra workspace definitions for Hyprland"; + }; + + monitorVariables = mkOption { + type = types.attrsOf types.str; + default = { }; + example = { + "$mon_top" = "desc:BNQ G2420HDBL T2B04424SL000"; + "$mon_left" = "desc:Samsung Electric Company LS27A600U HNMT502389"; + }; + description = "Monitor name variables for workspace configuration"; + }; + + cursorNoHardware = mkEnableOption "disable hardware cursors"; + }; + + config = mkIf cfg.enable { + home.packages = + with pkgs; + [ + dunst + hyprpaper + rofi + slurp + swww + waybar + wl-clipboard + catppuccin-cursors.macchiatoLavender + bibata-cursors + libsForQt5.qt5.qtwayland + libsForQt5.qt5ct + ] + ++ optional cfg.enableGrimblast grimblast; services.hyprpaper = { enable = true; @@ -34,12 +97,12 @@ settings = { general = { lock_cmd = "${pkgs.hyprlock}/bin/hyprlock"; - before_sleep_cmd = "${pkgs.hyprlock}/bin/hyprlock"; ignore_dbus_inhibit = false; }; listener = { timeout = 240; - on-timeout = "${pkgs.hyprlock}/bin/hyprlock"; + on-timeout = config.services.hypridle.settings.general.lock_cmd; + before_sleep_cmd = config.services.hypridle.settings.general.lock_cmd; }; }; }; @@ -101,18 +164,30 @@ wayland.windowManager.hyprland = { enable = true; package = pkgs.hyprland; + systemd.enable = false; settings = { "$mainMod" = "SUPER"; "$shiftMainMod" = "SUPER_SHIFT"; "$term" = "kitty"; + } + // cfg.monitorVariables + // { + monitor = cfg.monitors; - monitor = [ "eDP-1,1920x1080@60,0x0,1" ]; input = { kb_layout = "no"; follow_mouse = 1; }; - env = [ "XDG_SESSION_TYPE,wayland" ]; + device = optional cfg.enableWacom { + name = "wacom-one-by-wacom-m-pen"; + }; + + cursor = optionalAttrs cfg.cursorNoHardware { + no_hardware_cursors = true; + }; + + env = [ "XDG_SESSION_TYPE,wayland" ] ++ cfg.extraEnv; decoration = { rounding = 10; @@ -144,14 +219,17 @@ "specialWorkspace, 1, 4, default, fade" ]; }; + dwindle = { pseudotile = true; preserve_split = true; special_scale_factor = 0.85; }; + master = { new_status = "master"; }; + misc = { force_default_wallpaper = 0; disable_hyprland_logo = true; @@ -169,73 +247,49 @@ } ]; - workspace = [ - "special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false" - ]; + workspace = + [ "special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false" ] + ++ cfg.extraWorkspaces; bindm = [ "$mainMod,mouse:272,movewindow" "$shiftMainMod,mouse:272,resizewindow" ]; - bindr = [ - ]; - bind = [ # term "$mainMod,Return,exec,$term" - # rofi "$mainMod,D,exec,rofi-launcher" "$mainMod,P,exec,rofi-rbw" - # hyprlock "$shiftMainMod,l,exec,${pkgs.hyprlock}/bin/hyprlock" - # hyprland "$mainMod,Q,killactive," "CTRLALT,Delete,exit," "$mainMod,Space,togglefloating," "$mainMod,F,fullscreen," - # focus "$mainMod,l,movefocus,l" "$mainMod,h,movefocus,r" "$mainMod,k,movefocus,u" "$mainMod,j,movefocus,d" - # move "$mainMod,h,movewindow,l" "$mainMod,l,movewindow,r" "$mainMod,k,movewindow,u" "$mainMod,j,movewindow,d" - # Force opacity "$shiftMainMod,o,exec, hl-no-opacity" - - # worspace switching - "$mainMod,1,workspace,1" - "$mainMod,2,workspace,2" - "$mainMod,3,workspace,3" - "$mainMod,4,workspace,4" - "$mainMod,5,workspace,5" - "$mainMod,6,workspace,6" - - # Move window to workspace - "$shiftMainMod,1,movetoworkspace,1" - "$shiftMainMod,2,movetoworkspace,2" - "$shiftMainMod,3,movetoworkspace,3" - "$shiftMainMod,4,movetoworkspace,4" - "$shiftMainMod,5,movetoworkspace,5" - "$shiftMainMod,5,movetoworkspace,6" - + ] + ++ cfg.extraKeybinds + ++ [ # Special workspace "$mainMod,c,togglespecialworkspace" "$shiftMainMod,c,movetoworkspace, special" ]; - exec-once = [ - ]; + exec-once = [ ]; }; }; }; diff --git a/home/hyprland/gunter.nix b/home/hyprland/gunter.nix deleted file mode 100644 index 9d5365b..0000000 --- a/home/hyprland/gunter.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./hyprland_gunter.nix - ./waybar - ./xdg.nix - ./cursor.nix - ]; -} diff --git a/home/hyprland/hypridle.nix b/home/hyprland/hypridle.nix deleted file mode 100644 index e745c52..0000000 --- a/home/hyprland/hypridle.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - osConfig, - pkgs, - ... -}: -{ - - home.packages = with pkgs; [ hypridle ]; - xdg.configFile = { - "hypr/hypridle.conf" = { - source = config.lib.file.mkOutOfStoreSymlink ./. + "/hypridle_${osConfig.system.name}.conf"; - target = "hypr/hypridle.conf"; - }; - }; -} diff --git a/home/hyprland/hypridle_gunter.conf b/home/hyprland/hypridle_gunter.conf deleted file mode 100644 index 346b64e..0000000 --- a/home/hyprland/hypridle_gunter.conf +++ /dev/null @@ -1,12 +0,0 @@ -general { - lock_cmd = hyprlock # dbus/sysd lock command (loginctl lock-session) - # unlock_cmd = notify-send "unlock!" # same as above, but unlock - before_sleep_cmd = lockhelper # command ran before sleep - # after_sleep_cmd = # command ran after sleep - ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) -} - -listener { - timeout = 240 # in seconds - on-timeout = lockhelper # command to run when timeout has passed -} diff --git a/home/hyprland/hypridle_magicman.conf b/home/hyprland/hypridle_magicman.conf deleted file mode 100644 index 4fe54f6..0000000 --- a/home/hyprland/hypridle_magicman.conf +++ /dev/null @@ -1,19 +0,0 @@ -general { - lock_cmd = lockhelper # dbus/sysd lock command (loginctl lock-session) - # unlock_cmd = notify-send "unlock!" # same as above, but unlock - before_sleep_cmd = lockhelper # command ran before sleep - # after_sleep_cmd = lockhelper # command ran after sleep - ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) -} - -listener { - timeout = 240 # in seconds - on-timeout = lockhelper # command to run when timeout has passed - # on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired. -} - -listener { - timeout = 900 - on-timeout = systemctl suspend # command to run when timeout has passed - # on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired. -} diff --git a/home/hyprland/hyprland_gunter.nix b/home/hyprland/hyprland_gunter.nix deleted file mode 100644 index 07f8e5e..0000000 --- a/home/hyprland/hyprland_gunter.nix +++ /dev/null @@ -1,384 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: -let - lockhelper = pkgs.callPackage ../scripts/lockhelper.nix { }; - monitorTopDesc = "BNQ G2420HDBL T2B04424SL000"; - monitorTopName = "desc:${monitorTopDesc}"; - monitorTopHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorTopDesc); - - monitorLeftDesc = "Samsung Electric Company LS27A600U HNMT502389"; - monitorLeftName = "desc:${monitorLeftDesc}"; - monitorLeftHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorLeftDesc); - - monitorCenterDesc = "Acer Technologies XB271HU #ASPVEKfgZ8Dd"; - monitorCenterName = "desc:${monitorCenterDesc}"; - monitorCenterHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorCenterDesc); - - monitorRightDesc = "Samsung Electric Company LS27A600U HNMT502390"; - monitorRightName = "desc:${monitorRightDesc}"; - monitorRightHash = builtins.substring 0 8 (builtins.hashString "sha256" monitorRightDesc); - -in -{ - options.hyprland.enable = lib.mkEnableOption "Hyprland"; - config = { - home.packages = with pkgs; [ - dunst - rofi - slurp - swww - waybar - wl-clipboard - catppuccin-cursors.macchiatoLavender - bibata-cursors - # For potentially fixing some issues - libsForQt5.qt5.qtwayland - libsForQt5.qt5ct - ]; - - services.hyprpaper = { - enable = true; - settings = { - splash = false; - }; - }; - services.hypridle = { - enable = true; - settings = { - general = { - lock_cmd = "${pkgs.hyprlock}/bin/hyprlock"; - before_sleep_cmd = "${lockhelper}/bin/lockhelper"; - ignore_dbus_inhibit = false; - }; - listener = { - timeout = 240; - on-timeout = "${lockhelper}/bin/lockhelper"; - }; - }; - }; - - programs.hyprlock = { - enable = true; - settings = { - background = [ - { - monitor = monitorTopName; - # path = "/tmp/lockscreen/${monitorTopHash}.png"; - path = "screenshot"; - color = "rgba(17, 17, 17, 1.0)"; - blur_passes = 3; - contrast = 0.8916; - brightness = 0.8172; - vibrancy = 0.1696; - vibrancy_darkness = 0.0; - } - { - monitor = monitorLeftName; - # path = "/tmp/lockscreen/${monitorLeftHash}.png"; - path = "screenshot"; - color = "rgba(17, 17, 17, 1.0)"; - blur_passes = 3; - contrast = 0.8916; - brightness = 0.8172; - vibrancy = 0.1696; - vibrancy_darkness = 0.0; - zindex = 1; - } - { - monitor = monitorCenterName; - # path = "/tmp/lockscreen/${monitorCenterHash}.png"; - path = "screenshot"; - color = "rgba(17, 17, 17, 1.0)"; - blur_passes = 3; - contrast = 0.8916; - brightness = 0.8172; - vibrancy = 0.1696; - vibrancy_darkness = 0.0; - } - { - monitor = monitorRightName; - # path = "/tmp/lockscreen/${monitorRightHash}.png"; - path = "screenshot"; - color = "rgba(17, 17, 17, 1.0)"; - blur_passes = 3; - contrast = 0.8916; - brightness = 0.8172; - vibrancy = 0.1696; - vibrancy_darkness = 0.0; - } - ]; - - general = { - grace = 0; - }; - - input-field = [ - { - size = "250, 60"; - outline_thickness = 2; - dots_size = 0.2; - dots_spacing = 0.2; - dots_center = true; - outer_color = "rgba(0, 0, 0, 0)"; - inner_color = "rgba(0, 0, 0, 0.5)"; - font_color = "rgb(200, 200, 200)"; - fade_on_empty = false; - font_family = "JetBrains Mono Nerd Font Mono"; - placeholder_text = "Input Password..."; - hide_input = false; - position = "0, -120"; - halign = "center"; - valign = "center"; - } - ]; - - label = [ - { - text = "cmd[update:2000] echo \"$(date +\"%b %d %H:%M\")\""; - color = "rgba(255, 255, 255, 0.6)"; - font_size = 120; - font_family = "JetBrains Mono Nerd Font Mono ExtraBold"; - position = "0, -300"; - halign = "center"; - valign = "top"; - } - ]; - }; - }; - - # streamcontroller service - - systemd.user.services = { - streamcontroller = { - Unit = { - Description = "Streamcontroller service"; - PartOf = [ "graphical-session.target" ]; - After = [ "graphical-session.target" ]; - Requisite = [ "graphical-session.target" ]; - }; - - Service = { - ExecStart = "${pkgs.streamcontroller}/bin/streamcontroller -b"; - Restart = "on-failure"; - }; - - Install = { - WantedBy = [ "graphical-session.target" ]; - }; - }; - }; - - wayland.windowManager.hyprland = { - enable = true; - package = pkgs.hyprland; - systemd.enable = false; - settings = { - "$mainMod" = "SUPER"; - "$shiftMainMod" = "SUPER_SHIFT"; - "$term" = "kitty"; - - # monitors - "$mon_top" = monitorTopName; - "$mon_left" = monitorLeftName; - "$mon_center" = monitorCenterName; - "$mon_right" = monitorRightName; - - monitor = [ - "$mon_top,1920x1080@60,2560x0,1" # top T2B04424SL000 - # "DP-8,1920x1080@60,2560x0,1" # top T2B04424SL000 60 - "$mon_left,2560x1440@75,0x1080,1" # left - # "DP-6,2560x1440@75,0x1080,1" # left 75hz - "$mon_center,2560x1440@120,2560x1080,1" # main #ASPVEKfgZ8Dd - # "DP-4,2560x1440@144,2560x1080,1" # main #ASPVEKfgZ8Dd 120hz - "$mon_right,2560x1440@75,5120x1080,1" # right - # "DP-7,2560x1440@75,5120x1080,1" # right 75hz - ]; - input = { - kb_layout = "no"; - follow_mouse = 1; - }; - - device = [ - { - name = "wacom-one-by-wacom-m-pen"; - output = "$mon_center"; - } - ]; - - cursor = { - no_hardware_cursors = true; - }; - - env = [ - "LIBVA_DRIVER_NAME,nvidia" - "XDG_SESSION_TYPE,wayland" - "GBM_BACKEND,nvidia-drm" - # "__GLX_VENDOR_LIBRARY_NAME,nvidia" - "WLR_NO_HARDWARE_CURSORS,1" - ]; - - decoration = { - rounding = 10; - blur = { - enabled = true; - size = 3; - passes = 1; - xray = true; - }; - }; - - general = { - gaps_in = 4; - gaps_out = 10; - border_size = 2; - layout = "dwindle"; - }; - - ecosystem = { - no_update_news = true; - }; - - animations = { - enabled = true; - bezier = [ - "myBezier, 0.05, 0.9, 0.1, 1.05" - "easeInB, 0.6, -0.28, 0.735, 0.045" - ]; - - animation = [ - "windows, 1, 7, myBezier" - "windowsOut, 1, 7, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 7, default" - "workspaces, 1, 6, easeInB, slidefadevert" - "specialWorkspace, 1, 4, default, fade" - ]; - }; - - dwindle = { - pseudotile = true; - preserve_split = true; - special_scale_factor = 0.85; - }; - - master = { - new_status = "master"; - }; - - misc = { - force_default_wallpaper = 0; - disable_hyprland_logo = true; - }; - - windowrule = [ - { - name = "terminal_opacity"; - "match:class" = "kitty"; - opacity = 0.9; - } - ]; - - workspace = [ - "name:T1, monitor:$mon_top, persistent:true, default:true" - "name:T2, monitor:$mon_top, persistent:true, default:false" - "name:L1, monitor:$mon_left, persistent:true, default:true" - "name:L2, monitor:$mon_left, persistent:true, default:false" - "name:R1, monitor:$mon_right, persistent:true, default:true" - "name:R2, monitor:$mon_right, persistent:true, default:false" - "name:c1, monitor:$mon_center, persistent:true, default:true" - "name:c2, monitor:$mon_center, persistent:true, default:false" - "name:c3, monitor:$mon_center, persistent:true, default:false" - "name:c4, monitor:$mon_center, persistent:true, default:false" - "special:special, on-created-empty:kitty, rounding:true, decorate:false, border:false" - ]; - - bindm = [ - "$mainMod,mouse:272,movewindow" - "$shiftMainMod,mouse:272,resizewindow" - ]; - - bindr = [ - # mumble ptt release - # ",code:202,exec,mumble rpc stoptalking" - # ",code:202,exec,pamixer --source 63 -m" - # ",code:202,exec,sleep 0.5 && pamixer --default-source -m" - ]; - - bind = [ - # term - "$mainMod,Return,exec,$term" - - # hyprlock - "$shiftMainMod,l,exec,${lockhelper}/bin/lockhelper" - - # rofi - "$mainMod,D,exec,rofi-launcher" - "$mainMod,P,exec,rofi-rbw" - - # hyprland - "$mainMod,Q,killactive," - "CTRLALT,Delete,exit," - "$mainMod,Space,togglefloating," - "$mainMod,F,fullscreen," - - # focus - "$mainMod,l,movefocus,l" - "$mainMod,h,movefocus,r" - "$mainMod,k,movefocus,u" - "$mainMod,j,movefocus,d" - - # move - "$mainMod,h,movewindow,l" - "$mainMod,l,movewindow,r" - "$mainMod,k,movewindow,u" - "$mainMod,j,movewindow,d" - - # Force opacity - "$shiftMainMod,o,exec, hl-no-opacity" - - # grimblast - "$mainMod,Print,exec,grimblast save active ~/tmp/$(date -Iseconds).png" - "$shiftMainMod,Print,exec,grimblast copy area" - ",Print,exec,grimblast copy active" - - # mumble ptt click - # ",code:202,exec,mumble rpc starttalking" - #",code:202,pass,^(info\.mumble\.Mumble)$" - # ",code:202,exec,pamixer --default-source -u" - ",code:202,pass,^discord$" - - # Paste to wtype - "$mainMod,v,exec,sleep 0.5s && wl-paste | wtype -" - - # worspace switching - "$mainMod,1,workspace,name:c1" - "$mainMod,2,workspace,name:c2" - "$mainMod,3,workspace,name:c3" - "$mainMod,4,workspace,name:c4" - "$mainMod,5,workspace,5" - "$mainMod,6,workspace,6" - - # Move window to workspace - "$shiftMainMod,1,movetoworkspace,name:c1" - "$shiftMainMod,2,movetoworkspace,name:c2" - "$shiftMainMod,3,movetoworkspace,name:c3" - "$shiftMainMod,4,movetoworkspace,name:c4" - "$shiftMainMod,5,movetoworkspace,5" - "$shiftMainMod,6,movetoworkspace,6" - - # Special workspace - "$mainMod,c,togglespecialworkspace" - "$shiftMainMod,c,movetoworkspace, special" - ]; - - exec-once = [ - ]; - }; - }; - }; -} diff --git a/home/hyprland/hyprland_prismo.nix b/home/hyprland/hyprland_prismo.nix deleted file mode 100644 index c15c147..0000000 --- a/home/hyprland/hyprland_prismo.nix +++ /dev/null @@ -1,159 +0,0 @@ -{ - inputs, - pkgs, - lib, - config, - ... -}: -{ - options.hyprland.enable = lib.mkEnableOption "Hyprland"; - config = { - home.packages = with pkgs; [ - dunst - # hyprlock - hyprpaper - rofi-wayland - slurp - swww - waybar - wl-clipboard - catppuccin-cursors.macchiatoLavender - bibata-cursors - # For potentially fixing some issues - libsForQt5.qt5.qtwayland - libsForQt5.qt5ct - ]; - - wayland.windowManager.hyprland = { - enable = true; - package = pkgs.hyprland; - settings = { - "$mainMod" = "SUPER"; - "$shiftMainMod" = "SUPER_SHIFT"; - "$term" = "kitty"; - - monitor = [ ]; - input = { - kb_layout = "no"; - follow_mouse = 1; - }; - - env = [ "XDG_SESSION_TYPE,wayland" ]; - - decoration = { - rounding = 0; - drop_shadow = true; - shadow_range = 4; - shadow_render_power = 3; - blur = { - enabled = true; - size = 3; - passes = 1; - xray = true; - }; - }; - - general = { - gaps_in = 4; - gaps_out = 10; - border_size = 2; - layout = "dwindle"; - }; - - animations = { - enabled = true; - bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; - animation = [ - "windows, 1, 7, myBezier" - "windowsOut, 1, 7, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 7, default" - "workspaces, 1, 6, default" - ]; - }; - dwindle = { - pseudotile = true; - preserve_split = true; - }; - master = { - new_status = "master"; - }; - misc.force_default_wallpaper = -1; - - windowrulev2 = [ - "opacity 0.95 override 0.7 override,class:^(Alacritty)$" - "opacity 0.95 override 0.7 override,class:^(kitty)$" - ]; - - workspace = [ - "name:mumble, monitor:$mon_top, persistent:true, default:true" - "name:left, monitor:$mon_left, persistent:true, default:true" - "name:right, monitor:$mon_right, persistent:true, default:true" - "name:main 1, monitor:$mon_center, persistent:true, default:true" - "name:main 2, monitor:$mon_center, persistent:true, default:true" - ]; - - bindm = [ "ALT,mouse:272,movewindow" ]; - - bindr = [ - # mumble ptt release - # ",code:202,exec,mumble rpc stoptalking" - # ",code:202,exec,pamixer --source 63 -m" - # ",code:202,exec,sleep 0.5 && pamixer --default-source -m" - ]; - - bind = [ - # term - "$mainMod,Return,exec,$term" - - # rofi - "$mainMod,D,exec,rofi-launcher" - "$mainMod,P,exec,rofi-rbw" - - # hyprland - "$mainMod,Q,killactive," - "CTRLALT,Delete,exit," - "$mainMod,Space,togglefloating," - "$mainMod,F,fullscreen," - - # focus - "$mainMod,l,movefocus,l" - "$mainMod,h,movefocus,r" - "$mainMod,k,movefocus,u" - "$mainMod,j,movefocus,d" - - # move - "$mainMod,h,movewindow,l" - "$mainMod,l,movewindow,r" - "$mainMod,k,movewindow,u" - "$mainMod,j,movewindow,d" - - # Force opacity - "$shiftMainMod,o,exec, hl-no-opacity" - - # mumble ptt click - # ",code:202,exec,mumble rpc starttalking" - #",code:202,pass,^(info\.mumble\.Mumble)$" - # ",code:202,exec,pamixer --default-source -u" - ",code:202,pass,^discord$" - - # worspace switching - "$mainMod,1,workspace,name:main 1" - "$mainMod,2,workspace,name:main 2" - "$mainMod,3,workspace,3" - "$mainMod,4,workspace,4" - "$mainMod,5,workspace,5" - "$mainMod,6,workspace,6" - ]; - - exec-once = [ - "waybar" - "hyprpaper & sleep 2 && randomwp" - "easyeffects --gapplication-service" - # "dunst" - ]; - }; - }; - }; -} diff --git a/home/hyprland/hyprlock_gunter.conf b/home/hyprland/hyprlock_gunter.conf deleted file mode 100644 index 168bdc4..0000000 --- a/home/hyprland/hyprlock_gunter.conf +++ /dev/null @@ -1,91 +0,0 @@ -# BACKGROUND -background { - monitor = DP-5 - path = /tmp/lockscreen/DP-5.png - blur_passes = 3 - contrast = 0.8916 - brightness = 0.8172 - vibrancy = 0.1696 - vibrancy_darkness = 0.0 -} - -background { - monitor = DP-6 - path = /tmp/lockscreen/DP-6.png - blur_passes = 3 - contrast = 0.8916 - brightness = 0.8172 - vibrancy = 0.1696 - vibrancy_darkness = 0.0 -} -background { - monitor = DP-7 - path = /tmp/lockscreen/DP-7.png - blur_passes = 3 - contrast = 0.8916 - brightness = 0.8172 - vibrancy = 0.1696 - vibrancy_darkness = 0.0 -} -background { - monitor = DP-8 - path = /tmp/lockscreen/DP-8.png - blur_passes = 3 - contrast = 0.8916 - brightness = 0.8172 - vibrancy = 0.1696 - vibrancy_darkness = 0.0 -} - -# GENERAL -general { - no_fade_in = false - grace = 0 - disable_loading_bar = true -} - -# INPUT FIELD -input-field { - monitor = - size = 250, 60 - outline_thickness = 2 - dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 - dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 - dots_center = true - outer_color = rgba(0, 0, 0, 0) - inner_color = rgba(0, 0, 0, 0.5) - font_color = rgb(200, 200, 200) - fade_on_empty = false - font_family = JetBrains Mono Nerd Font Mono - placeholder_text = Input Password... - hide_input = false - position = 0, -120 - halign = center - valign = center -} - -# TIME -label { - monitor = - text = cmd[update:2000] echo "$(date +"%b %d %H:%M")" - #color = $foreground - color = rgba(255, 255, 255, 0.6) - font_size = 120 - font_family = JetBrains Mono Nerd Font Mono ExtraBold - position = 0, -300 - halign = center - valign = top -} - -## USER -#label { -# monitor = -# text = Hi there, $USER -# color = $foreground -# #color = rgba(255, 255, 255, 0.6) -# font_size = 25 -# font_family = JetBrains Mono Nerd Font Mono -# position = 0, -40 -# halign = center -# valign = center -#} diff --git a/home/hyprland/hyprlock_magicman.conf b/home/hyprland/hyprlock_magicman.conf deleted file mode 100644 index e78a9d3..0000000 --- a/home/hyprland/hyprlock_magicman.conf +++ /dev/null @@ -1,78 +0,0 @@ -source = ~/.cache/wal/colors-hyprland.conf -# BACKGROUND -background { - monitor = - path = /tmp/lockscreen/eDP-1.png - blur_passes = 3 - contrast = 0.8916 - brightness = 0.8172 - vibrancy = 0.1696 - vibrancy_darkness = 0.0 -} - -# GENERAL -general { - no_fade_in = false - grace = 0 - disable_loading_bar = true -} - -# INPUT FIELD -input-field { - monitor = - size = 250, 60 - outline_thickness = 2 - dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 - dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 - dots_center = true - outer_color = rgba(0, 0, 0, 0) - inner_color = rgba(0, 0, 0, 0.5) - font_color = rgb(200, 200, 200) - fade_on_empty = false - font_family = JetBrains Mono Nerd Font Mono - placeholder_text = Input Password... - hide_input = false - position = 0, -120 - halign = center - valign = center -} - -# TIME -label { - monitor = - text = cmd[update:1000] echo "$(date +"%b %d %H:%M")" - color = $foreground - #color = rgba(255, 255, 255, 0.6) - font_size = 120 - font_family = JetBrains Mono Nerd Font Mono ExtraBold - position = 0, -300 - halign = center - valign = top -} - -## USER -#label { -# monitor = -# text = Hi there, $USER -# color = $foreground -# #color = rgba(255, 255, 255, 0.6) -# font_size = 25 -# font_family = JetBrains Mono Nerd Font Mono -# position = 0, -40 -# halign = center -# valign = center -#} - -# Battery level -label { - monitor = - text = cmd[update:1000] echo "$(batlvl)" - color = $foreground - #color = rgba(255, 255, 255, 0.6) - font_size = 18 - # font_family = JetBrainsMono, Font Awesome 6 Free Solid - font_family = JetBrains Mono Nerd Font Mono - position = 0, -20 - halign = center - valign = bottom -} diff --git a/home/hyprland/hyprpaper.conf b/home/hyprland/hyprpaper.conf deleted file mode 100644 index 4cf552c..0000000 --- a/home/hyprland/hyprpaper.conf +++ /dev/null @@ -1 +0,0 @@ -splash = false diff --git a/home/hyprland/magicman.nix b/home/hyprland/magicman.nix deleted file mode 100644 index 5657853..0000000 --- a/home/hyprland/magicman.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./hyprland_magicman.nix - ./waybar - ./xdg.nix - ./cursor.nix - ]; -} diff --git a/home/hyprland/prismo.nix b/home/hyprland/prismo.nix deleted file mode 100644 index 5ecd4ac..0000000 --- a/home/hyprland/prismo.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./hyprland_prismo.nix - ./waybar - ./xdg.nix - ./cursor.nix - ]; -} diff --git a/home/hyprland/xdg.nix b/home/hyprland/xdg.nix deleted file mode 100644 index 2b71d6a..0000000 --- a/home/hyprland/xdg.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, ... }: -{ - xdg.configFile = { - "hypr/hyprpaper.conf" = { - source = config.lib.file.mkOutOfStoreSymlink ./. + "/hyprpaper.conf"; - target = "hypr/hyprpaper.conf"; - }; - }; -} diff --git a/home/i3/default.nix b/home/i3/default.nix deleted file mode 100644 index c035be2..0000000 --- a/home/i3/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - mod = "Mod4"; -in -{ - xsession.windowManager.i3 = { - enable = true; - config = { - modifier = mod; - - keybindings = lib.mkOptionDefault { - "${mod}+Enter" = "exec kitty"; - - # Focus - "${mod}+j" = "focus left"; - "${mod}+k" = "focus down"; - "${mod}+l" = "focus up"; - "${mod}+semicolon" = "focus right"; - - # Move - "${mod}+Shift+j" = "move left"; - "${mod}+Shift+k" = "move down"; - "${mod}+Shift+l" = "move up"; - "${mod}+Shift+semicolon" = "move right"; - - # My multi monitor setup - "${mod}+m" = "move workspace to output DP-2"; - "${mod}+Shift+m" = "move workspace to output DP-5"; - }; - }; - }; -} diff --git a/home/packages/default.nix b/home/packages/default.nix index 8c0d68a..d9d9cbe 100644 --- a/home/packages/default.nix +++ b/home/packages/default.nix @@ -13,6 +13,7 @@ in bat bzip2 chromium + claude-code croc devenv distrobox diff --git a/home/prismo.nix b/home/prismo.nix deleted file mode 100644 index b427efa..0000000 --- a/home/prismo.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - pkgs, - inputs, - user, - ... -}: -{ - imports = [ inputs.home-manager.nixosModules.home-manager ]; - home-manager = { - useUserPackages = true; - useGlobalPkgs = true; - extraSpecialArgs = { - inherit pkgs inputs user; - }; - users.${user} = - { pkgs, ... }: - { - imports = [ - inputs.sops-nix.homeManagerModules.sops - ./sops - ./editor/neovim - ./programs/firefox - ./programs/tmux - ./programs/dunst - ./programs/kitty - ./programs/rofi - ./programs/obs-studio - ./programs/vscode - ./scripts - ./zsh - ./packages - ./hyprland/hyprland_prismo.nix - ./ssh - ./services/backup-home.nix - ./services/ghettoptt.nix - ]; - firefox.enable = true; - tmux.enable = true; - hyprland.enable = true; - home = { - username = "${user}"; - homeDirectory = "/home/${user}"; - stateVersion = "23.11"; - }; - programs.home-manager.enable = true; - }; - }; -} diff --git a/home/programs/streamcontroller/default.nix b/home/programs/streamcontroller/default.nix new file mode 100644 index 0000000..2e33d58 --- /dev/null +++ b/home/programs/streamcontroller/default.nix @@ -0,0 +1,35 @@ +{ + pkgs, + lib, + config, + ... +}: +with lib; +let + cfg = config.streamcontroller; +in +{ + options.streamcontroller = { + enable = mkEnableOption "streamcontroller service"; + }; + + config = mkIf cfg.enable { + systemd.user.services.streamcontroller = { + Unit = { + Description = "Streamcontroller service"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + Requisite = [ "graphical-session.target" ]; + }; + + Service = { + ExecStart = "${pkgs.streamcontroller}/bin/streamcontroller -b"; + Restart = "on-failure"; + }; + + Install = { + WantedBy = [ "graphical-session.target" ]; + }; + }; + }; +} diff --git a/home/scripts/lockhelper.nix b/home/scripts/lockhelper.nix deleted file mode 100644 index f0c4cf5..0000000 --- a/home/scripts/lockhelper.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - writeShellApplication, - grim, - jq, - gawk, - hyprland, - hyprlock, - procps, -}: -writeShellApplication { - name = "lockhelper"; - runtimeInputs = [ - grim - jq - gawk - hyprland - hyprlock - procps - ]; - text = (builtins.readFile ./lockhelper.sh); -} diff --git a/home/scripts/lockhelper.sh b/home/scripts/lockhelper.sh deleted file mode 100644 index 48573ad..0000000 --- a/home/scripts/lockhelper.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -mkdir -p /tmp/lockscreen || true - -monitor_lines=$(hyprctl monitors -j | jq -r '.[] | select (.name | contains ("DP")) | [.name, .description]| @tsv') - -while IFS= read -r m; do - name=$(echo "$m" | awk -F $'\t' '{print $1}') - sum=$(echo "$m" | awk -F $'\t' '{printf $2}' | sha256sum | awk '{print substr($1,1,8)}') - - grim -o "$name" "/tmp/lockscreen/$sum.png" || true -done <<< "$monitor_lines" - -# Only lock if not already running -if [ -z "$(pgrep hyprlock)" ] -then - exec hyprlock -else - echo "Already locked" -fi diff --git a/secrets/prismo/secrets.yaml b/secrets/prismo/secrets.yaml deleted file mode 100644 index 502375c..0000000 --- a/secrets/prismo/secrets.yaml +++ /dev/null @@ -1,21 +0,0 @@ -test: ENC[AES256_GCM,data:MtSN,iv:ag/LDkk0DgE6QPjB/08RhEw3LzQHDOkRH0/4OBn8KUU=,tag:FeiJfjtbd4MCwNmCezH44A==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1lznyk4ee7e7x8n92cq2n87kz9920473ks5u9jlhd3dczfzq4wamqept56u - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhaGtaL0tkVFFuTk9ka0Rz - bHRpN0UyZFQxTG1ZSTRxSmI4eHJhbVM1ZWs0Cmx5UkdrSFNsRGU1eWRyU0hEcElH - WWJLWHdNTVR4RVpGYlcwMlJ4b2J5eHcKLS0tIGkrTWpNdVdERHpvaHZRdGxHN1Mr - WDJGWFA1M2kxQ1hHKzRwRTY4WUZwN2MKQIT//FEdXYWfEkI1knDD3uN+KMaIDtmR - H64031YMvAh67fVGekRv72S5DWzrft/Zr2libKpsN7T4G9fxGihhEw== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-02T20:56:45Z" - mac: ENC[AES256_GCM,data:WQKHFMPmEvDTHS4eYYVcpsX7j8Xef9SV0VKNAbQh0hnZPMJEll4jtzR8sub2tUEt9/I1PvngXMWz6pPmINwOKRI+L3+gTSdg9QgPiikjE6wDA2qbpv9pd14uH22ABmCjkTeEZ9R+b9KbBl0GtMQof1sdTL9nUDrr9Fyfrr/UXs4=,iv:4DgDhwb2ksh2THtR/H5PiO57vF4yKSZ6FyCjWBqCQQI=,tag:dczk4ZAI8k6dareobGmt/w==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.0