diff options
-rw-r--r-- | home/default.nix | 120 | ||||
-rw-r--r-- | home/git.nix (renamed from programs/git/default.nix) | 0 | ||||
-rw-r--r-- | home/gpg.nix (renamed from programs/gpg/default.nix) | 10 | ||||
-rw-r--r-- | home/neovim/config.nix (renamed from programs/neovim/config.nix) | 0 | ||||
-rw-r--r-- | home/neovim/default.nix (renamed from programs/neovim/default.nix) | 0 | ||||
-rw-r--r-- | home/neovim/init.lua (renamed from programs/neovim/init.lua) | 0 | ||||
-rw-r--r-- | home/ssh/config (renamed from programs/ssh/config) | 0 | ||||
-rw-r--r-- | home/ssh/default.nix | 13 | ||||
-rw-r--r-- | home/starship.nix (renamed from programs/starship/default.nix) | 0 | ||||
-rw-r--r-- | home/tmux/default.nix (renamed from programs/tmux/default.nix) | 0 | ||||
-rw-r--r-- | home/tmux/tmux.conf (renamed from programs/tmux/tmux.conf) | 0 | ||||
-rwxr-xr-x | home/tmux/tmux_window (renamed from programs/tmux/tmux_window) | 0 | ||||
-rw-r--r-- | home/zsh/default.nix (renamed from programs/zsh/default.nix) | 0 | ||||
-rw-r--r-- | home/zsh/zprofile (renamed from programs/zsh/zprofile) | 0 | ||||
-rw-r--r-- | home/zsh/zshrc (renamed from programs/zsh/zshrc) | 0 | ||||
-rw-r--r-- | hosts/shinji/default.nix | 1 | ||||
-rw-r--r-- | hosts/thinkpad/default.nix | 20 | ||||
-rw-r--r-- | modules/default.nix | 9 | ||||
-rw-r--r-- | modules/desktop/astal.nix | 24 | ||||
-rw-r--r-- | modules/desktop/default.nix | 106 | ||||
-rw-r--r-- | modules/desktop/firefox/default.nix | 39 | ||||
-rw-r--r-- | modules/desktop/firefox/extraPrefs.nix (renamed from programs/firefox/extraPrefs.nix) | 0 | ||||
-rw-r--r-- | modules/desktop/firefox/policy.nix (renamed from programs/firefox/policy.nix) | 0 | ||||
-rw-r--r-- | modules/desktop/firefox/policyExtensions.nix (renamed from programs/firefox/policyExtensions.nix) | 0 | ||||
-rw-r--r-- | modules/desktop/firefox/policyPrefs.nix (renamed from programs/firefox/policyPrefs.nix) | 0 | ||||
-rw-r--r-- | modules/desktop/firefox/userChrome.nix (renamed from programs/firefox/userChrome.nix) | 0 | ||||
-rw-r--r-- | modules/desktop/hypridle.nix | 45 | ||||
-rw-r--r-- | modules/desktop/hyprland.nix | 353 | ||||
-rw-r--r-- | modules/desktop/hyprlock.nix | 87 | ||||
-rw-r--r-- | modules/desktop/hyprpaper.nix | 22 | ||||
-rw-r--r-- | modules/desktop/mako.nix | 35 | ||||
-rw-r--r-- | modules/desktop/waybar/default.nix | 87 | ||||
-rw-r--r-- | modules/desktop/waybar/style.nix (renamed from programs/waybar/style.nix) | 0 | ||||
-rw-r--r-- | modules/desktop/wofi/default.nix | 29 | ||||
-rw-r--r-- | modules/desktop/wofi/style.nix (renamed from programs/wofi/style.nix) | 0 | ||||
-rw-r--r-- | modules/development/default.nix | 49 | ||||
-rw-r--r-- | modules/gaming/default.nix | 19 | ||||
-rw-r--r-- | modules/gaming/homestuck.nix | 19 | ||||
-rw-r--r-- | modules/gaming/minecraft.nix | 17 | ||||
-rw-r--r-- | modules/gaming/steam.nix | 34 | ||||
-rw-r--r-- | modules/terminal/default.nix | 15 | ||||
-rw-r--r-- | modules/terminal/kitty.nix | 84 | ||||
-rw-r--r-- | modules/virt/default.nix | 19 | ||||
-rw-r--r-- | modules/virt/docker.nix | 15 | ||||
-rw-r--r-- | modules/virt/qemu.nix | 20 | ||||
-rw-r--r-- | programs/astal/default.nix | 19 | ||||
-rw-r--r-- | programs/default.nix | 21 | ||||
-rw-r--r-- | programs/firefox/default.nix | 36 | ||||
-rw-r--r-- | programs/hypr/default.nix | 8 | ||||
-rw-r--r-- | programs/hypr/hypridle.nix | 40 | ||||
-rw-r--r-- | programs/hypr/hyprland.nix | 348 | ||||
-rw-r--r-- | programs/hypr/hyprlock.nix | 82 | ||||
-rw-r--r-- | programs/hypr/hyprpaper.nix | 17 | ||||
-rw-r--r-- | programs/kitty/default.nix | 79 | ||||
-rw-r--r-- | programs/mako/default.nix | 30 | ||||
-rw-r--r-- | programs/steam/default.nix | 25 | ||||
-rw-r--r-- | programs/talc/default.nix | 15 | ||||
-rw-r--r-- | programs/unofficial-homestuck-collection/default.nix | 15 | ||||
-rw-r--r-- | programs/waybar/default.nix | 82 | ||||
-rw-r--r-- | programs/wofi/default.nix | 24 | ||||
-rw-r--r-- | system/default.nix | 69 | ||||
-rw-r--r-- | system/hardware.nix | 9 | ||||
-rw-r--r-- | system/sshd.nix (renamed from programs/ssh/default.nix) | 16 |
63 files changed, 1226 insertions, 1000 deletions
diff --git a/home/default.nix b/home/default.nix index 8561236..4cdc894 100644 --- a/home/default.nix +++ b/home/default.nix @@ -1,11 +1,22 @@ { + lib, config, pkgs, inputs, ... -}: { +}: let + inherit (lib) optionals; + system = pkgs.stdenv.hostPlatform.system; +in { imports = [ inputs.home-manager.nixosModules.home-manager + ./neovim + ./ssh + ./tmux + ./zsh + ./git.nix + ./gpg.nix + ./starship.nix ]; home-manager.users.${config.user} = { @@ -15,76 +26,43 @@ news.display = "silent"; fonts.fontconfig.enable = true; - home.packages = with pkgs; [ - # nix - home-manager - # c / c++ - clang-tools - gcc - gdb - gnumake - nasm - pkg-config - # rust - rustc - rustfmt - rust-analyzer - cargo - clippy - # zig - zig - zls - # java/kotlin - gradle - jdk - jdt-language-server - kotlin - kotlin-language-server - maven - # gtk - adwaita-icon-theme - orchis-theme - # media - ffmpeg - libaacs - libavif - libbluray - libjxl - # wayland - cage - grimblast - wl-clipboard - wl-clip-persist - wl-mirror - # gaming - prismlauncher - # social - discord - element-desktop - gajim - # programs - blueman - brightnessctl - easyeffects - fd - filezilla - gimp - imagemagick - imv - jq - libnotify - mpv - pavucontrol - pfetch-rs - rsync - sassc - sl - starship - thunderbird-latest - vlc - yt-dlp - zathura - ]; + home.packages = + (with pkgs; [ + # nix + home-manager + # programs + fd + imagemagick + jq + pfetch-rs + rsync + sassc + sl + starship + yt-dlp + ]) + ++ [ + inputs.talc.packages.${system}.talc + ] + ++ (with pkgs; + optionals config.desktop.enable [ + # social + discord + element-desktop + gajim + thunderbird-latest + # programs + blueman + brightnessctl + easyeffects + filezilla + gimp + imv + mpv + pavucontrol + vlc + zathura + ]); xdg.configFile = { "aacs/keydb.cfg" = { diff --git a/programs/git/default.nix b/home/git.nix index 5c6a73a..5c6a73a 100644 --- a/programs/git/default.nix +++ b/home/git.nix diff --git a/programs/gpg/default.nix b/home/gpg.nix index 1aa145a..a2deed2 100644 --- a/programs/gpg/default.nix +++ b/home/gpg.nix @@ -4,7 +4,7 @@ pkgs, ... }: let - keysDir = ../../files/keys; + keysDir = ../files/keys; keys = lib.attrsets.mapAttrsToList (name: type: "${keysDir}/${name}") (builtins.readDir keysDir); gpgKeys = builtins.filter (path: lib.strings.hasSuffix "asc" path) keys; in { @@ -28,12 +28,4 @@ in { pinentry.package = pkgs.pinentry-curses; }; }; - - # yubikey support - services = { - pcscd.enable = true; - udev.packages = with pkgs; [ - yubikey-personalization - ]; - }; } diff --git a/programs/neovim/config.nix b/home/neovim/config.nix index ae10243..ae10243 100644 --- a/programs/neovim/config.nix +++ b/home/neovim/config.nix diff --git a/programs/neovim/default.nix b/home/neovim/default.nix index c1ed000..c1ed000 100644 --- a/programs/neovim/default.nix +++ b/home/neovim/default.nix diff --git a/programs/neovim/init.lua b/home/neovim/init.lua index 2be7fee..2be7fee 100644 --- a/programs/neovim/init.lua +++ b/home/neovim/init.lua diff --git a/programs/ssh/config b/home/ssh/config index 5ae97b6..5ae97b6 100644 --- a/programs/ssh/config +++ b/home/ssh/config diff --git a/home/ssh/default.nix b/home/ssh/default.nix new file mode 100644 index 0000000..b34e23f --- /dev/null +++ b/home/ssh/default.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + ... +}: { + # ssh config + home-manager.users.${config.user} = { + programs.ssh = { + enable = true; + extraConfig = lib.fileContents ./config; + }; + }; +} diff --git a/programs/starship/default.nix b/home/starship.nix index 74fd28a..74fd28a 100644 --- a/programs/starship/default.nix +++ b/home/starship.nix diff --git a/programs/tmux/default.nix b/home/tmux/default.nix index c7ce7db..c7ce7db 100644 --- a/programs/tmux/default.nix +++ b/home/tmux/default.nix diff --git a/programs/tmux/tmux.conf b/home/tmux/tmux.conf index 31ac742..31ac742 100644 --- a/programs/tmux/tmux.conf +++ b/home/tmux/tmux.conf diff --git a/programs/tmux/tmux_window b/home/tmux/tmux_window index 1cdacf0..1cdacf0 100755 --- a/programs/tmux/tmux_window +++ b/home/tmux/tmux_window diff --git a/programs/zsh/default.nix b/home/zsh/default.nix index ce1820e..ce1820e 100644 --- a/programs/zsh/default.nix +++ b/home/zsh/default.nix diff --git a/programs/zsh/zprofile b/home/zsh/zprofile index 4815b36..4815b36 100644 --- a/programs/zsh/zprofile +++ b/home/zsh/zprofile diff --git a/programs/zsh/zshrc b/home/zsh/zshrc index b1c61a2..b1c61a2 100644 --- a/programs/zsh/zshrc +++ b/home/zsh/zshrc diff --git a/hosts/shinji/default.nix b/hosts/shinji/default.nix index 9190dc5..92312b8 100644 --- a/hosts/shinji/default.nix +++ b/hosts/shinji/default.nix @@ -49,7 +49,6 @@ inputs.nixpkgs.lib.nixosSystem rec { foliate jami qbittorrent - qemu ]; } ]; diff --git a/hosts/thinkpad/default.nix b/hosts/thinkpad/default.nix index 6c7a15e..e71a441 100644 --- a/hosts/thinkpad/default.nix +++ b/hosts/thinkpad/default.nix @@ -12,7 +12,7 @@ inputs.nixpkgs.lib.nixosSystem rec { options ../../config ../../home - ../../programs + ../../modules ../../system { imports = [ @@ -27,6 +27,24 @@ inputs.nixpkgs.lib.nixosSystem rec { scale = 1.0; } ]; + + # modules + desktop = { + enable = true; + astal = true; + firefox = true; + hyprland = true; + hyprlock = true; + hypridle = true; + hyprpaper = true; + }; + gaming = { + homestuck = true; + minecraft = true; + }; + terminal = { + kitty = true; + }; } ]; } diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..f478f50 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,9 @@ +{...}: { + imports = [ + ./desktop + ./development + ./gaming + ./terminal + ./virt + ]; +} diff --git a/modules/desktop/astal.nix b/modules/desktop/astal.nix new file mode 100644 index 0000000..2f7f0f3 --- /dev/null +++ b/modules/desktop/astal.nix @@ -0,0 +1,24 @@ +{ + lib, + config, + pkgs, + inputs, + ... +}: let + system = pkgs.stdenv.hostPlatform.system; + astal = inputs.self.packages.${system}; + + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.astal { + default.appLauncher = lib.mkDefault "astal-launcher"; + + home-manager.users.${config.user} = { + home.packages = [ + astal.astal.shell + astal.astal.launcher + ]; + }; + }; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix new file mode 100644 index 0000000..a11842c --- /dev/null +++ b/modules/desktop/default.nix @@ -0,0 +1,106 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (lib) mkEnableOption mkIf optionals; + cfg = config.desktop; +in { + imports = [ + ./firefox + ./waybar + ./wofi + ./astal.nix + ./hypridle.nix + ./hyprland.nix + ./hyprlock.nix + ./hyprpaper.nix + ./mako.nix + ]; + + options.desktop = { + enable = mkEnableOption "Enable baseline desktop utils and programs."; + astal = mkEnableOption "Enable the astal gtk shell."; + firefox = mkEnableOption "Enable the firefox browser."; + hypridle = mkEnableOption "Enable the hypridle daemon."; + hyprland = mkEnableOption "Install the Hyprland desktop."; + hyprlock = mkEnableOption "Enable the hyprlock lockscreen."; + hyprpaper = mkEnableOption "Enable the hyprpaper wallpaper daemon."; + mako = mkEnableOption "Enable the mako notification daemon."; + waybar = mkEnableOption "Enable the waybar bar."; + wofi = mkEnableOption "Enable the wofi launcher."; + }; + + config = mkIf cfg.enable { + home-manager.users.${config.user} = { + # desktop specific programs + home.packages = with pkgs; [ + # gtk + adwaita-icon-theme + orchis-theme + # media + ffmpeg + libaacs + libavif + libbluray + libjxl + # wayland + cage + grimblast + wl-clipboard + wl-clip-persist + wl-mirror + # xdg + libnotify + ]; + + # desktop only fonts + fonts.packages = + (with pkgs; [ + corefonts + dejavu_fonts + fira-code + fira-code-symbols + jetbrains-mono + material-icons + nerd-fonts.fira-code + noto-fonts + noto-fonts-cjk-sans + noto-fonts-emoji + twemoji-color-font + vistafonts + ]) + ++ (with inputs.apple-fonts.packages.${pkgs.system}; [ + sf-pro + sf-mono + sf-compact + ]); + + fonts.fontconfig = { + enable = true; + defaultFonts = { + serif = [ + "Twemoji" + "DejaVu Serif" + ]; + sansSerif = [ + "Twemoji" + "DejaVu Sans" + ]; + monospace = [ + "Fira Code" + "FiraCode Nerd Font Mono" + "Font Awesome 6 Pro Regular" + "Twemoji" + "DejaVu Sans Mono" + ]; + emoji = [ + "Twemoji" + "Noto Color Emoji" + ]; + }; + }; + }; + }; +} diff --git a/modules/desktop/firefox/default.nix b/modules/desktop/firefox/default.nix new file mode 100644 index 0000000..e7720b2 --- /dev/null +++ b/modules/desktop/firefox/default.nix @@ -0,0 +1,39 @@ +{ + config, + lib, + pkgs, + ... +}: let + extraPrefs = import ./extraPrefs.nix; + userChrome = import ./userChrome.nix; + my-firefox = pkgs.firefox.override { + extraPrefs = extraPrefs; + }; + + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.firefox { + default.browser = lib.mkDefault "firefox"; + + home-manager.users.${config.user} = { + programs.firefox = { + enable = true; + package = my-firefox; + + # import configuration + policies = import ./policy.nix; + + # create profile for me :3 + profiles.${config.user} = { + search = { + force = true; + default = "ddg"; + }; + + userChrome = userChrome; + }; + }; + }; + }; +} diff --git a/programs/firefox/extraPrefs.nix b/modules/desktop/firefox/extraPrefs.nix index 74db984..74db984 100644 --- a/programs/firefox/extraPrefs.nix +++ b/modules/desktop/firefox/extraPrefs.nix diff --git a/programs/firefox/policy.nix b/modules/desktop/firefox/policy.nix index e222553..e222553 100644 --- a/programs/firefox/policy.nix +++ b/modules/desktop/firefox/policy.nix diff --git a/programs/firefox/policyExtensions.nix b/modules/desktop/firefox/policyExtensions.nix index 51d7e9d..51d7e9d 100644 --- a/programs/firefox/policyExtensions.nix +++ b/modules/desktop/firefox/policyExtensions.nix diff --git a/programs/firefox/policyPrefs.nix b/modules/desktop/firefox/policyPrefs.nix index 73d2781..73d2781 100644 --- a/programs/firefox/policyPrefs.nix +++ b/modules/desktop/firefox/policyPrefs.nix diff --git a/programs/firefox/userChrome.nix b/modules/desktop/firefox/userChrome.nix index ab93747..ab93747 100644 --- a/programs/firefox/userChrome.nix +++ b/modules/desktop/firefox/userChrome.nix diff --git a/modules/desktop/hypridle.nix b/modules/desktop/hypridle.nix new file mode 100644 index 0000000..01d4996 --- /dev/null +++ b/modules/desktop/hypridle.nix @@ -0,0 +1,45 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.hypridle { + home-manager.users.${config.user} = { + services.hypridle = { + enable = true; + + settings = { + general = { + lock_cmd = "pidof hyprlock || hyprlock"; + before_sleep_cmd = "loginctl lock-session"; + after_sleep_cmd = "hyprctl dispatch dpms on"; + ignore_dbus_inhibit = false; + }; + + listener = [ + # dim screen + { + timeout = 150; + on-timeout = "brightnessctl -s set 10"; + on-resume = "brightnessctl -r"; + } + # lock + { + timeout = 300; + on-timeout = "loginctl lock-session"; + } + # turn off screen + { + timeout = 350; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; + }; + }; + }; + }; +} diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix new file mode 100644 index 0000000..10b058d --- /dev/null +++ b/modules/desktop/hyprland.nix @@ -0,0 +1,353 @@ +{ + config, + pkgs, + lib, + inputs, + ... +}: let + system = pkgs.stdenv.hostPlatform.system; + hyprland = inputs.hyprland.packages.${system}; + hyprland-plugins = inputs.hyprland-plugins.packages.${system}; + hy3 = inputs.hy3.packages.${system}; + + fg = "rgb(${config.theme.colors.fg})"; + bg = "rgb(${config.theme.colors.bg})"; + primary = "rgb(${config.theme.colors.primary})"; + inactive = "rgb(${config.theme.colors.surface.bg})"; + + debug = false; + + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.hyprland { + environment = { + variables = { + HYPRLAND_TRACE = + if debug + then "1" + else "0"; + AQ_TRACE = + if debug + then "1" + else "0"; + + XDG_CURRENT_DESKTOP = "Hyprland"; + XDG_SESSION_TYPE = "wayland"; + XDG_SESSION_DESKTOP = "Hyprland"; + LIBSEAT_BACKEND = "logind"; + }; + sessionVariables = { + XCURSOR_THEME = "Adwaita"; + XCURSOR_SIZE = "24"; + + GTK_THEME = "Orchis-Teal-Dark"; + + MOZ_ENABLE_WAYLAND = "1"; + MOZ_USE_XINPUT = "1"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + }; + }; + + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + config = { + common.default = ["gtk"]; + hyprland.default = ["gtk" "hyprland"]; + }; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-wlr + hyprland.xdg-desktop-portal-hyprland + ]; + }; + + programs.xwayland.enable = true; + + home-manager.users.${config.user} = { + wayland.windowManager.hyprland = { + enable = true; + package = hyprland.hyprland; + + xwayland.enable = true; + systemd.enable = true; + + # Plugins + plugins = [ + hyprland-plugins.hyprexpo + hy3.hy3 + ]; + + # Config + settings = { + # Debug + debug.disable_logs = ! debug; + debug.disable_time = ! debug; + debug.enable_stdout_logs = debug; + + # Monitors + monitor = + map ( + monitor: "${monitor.name}, highres, auto, ${toString monitor.scale}, bitdepth, ${toString monitor.bitdepth}" + ) + config.monitors; + + # Autostart + exec-once = config.autoRun; + + # General + general = { + gaps_in = config.theme.innerGap; + gaps_out = config.theme.outerGap; + layout = "hy3"; + resize_on_border = "yes"; + extend_border_grab_area = 20; + border_size = config.theme.borderWidth; + "col.active_border" = "${primary}"; + "col.inactive_border" = "${inactive}"; + }; + + # Gestures + gestures = { + workspace_swipe = true; + workspace_swipe_fingers = 3; + workspace_swipe_forever = true; + workspace_swipe_cancel_ratio = 0.15; + }; + + # Decoration + decoration = { + rounding = config.theme.outerRadius; + shadow.enabled = false; + blur = { + enabled = config.theme.blur; + size = 4; + passes = 2; + noise = 0.008; + contrast = 0.8916; + brightness = 0.8; + }; + }; + + # Animations + animations = { + enabled = true; + + bezier = [ + "windowIn, 0.06, 0.71, 0.25, 1" + "windowResize, 0.04, 0.67, 0.38, 1" + ]; + + animation = [ + "windowsIn, 1, 3, windowIn, slide #popin 20%" + "windowsOut, 1, 3, windowIn, slide #popin 70%" + "windowsMove, 1, 2.5, windowResize" + "border, 1, 10, default" + "borderangle, 1, 8, default" + "fade, 1, 3, default" + "workspaces, 1, 6, default" + "layers, 1, 5, windowIn, slide" + ]; + }; + + # Input + input = { + kb_layout = "us"; + kb_variant = ""; + kb_model = ""; + kb_options = "gtp:alt_shift_toggle, compose:ralt"; + kb_rules = ""; + follow_mouse = 1; + touchpad = { + natural_scroll = "yes"; + }; + sensitivity = 0; + }; + + # Keybinds + "$mod" = "SUPER"; + bind = [ + # Launch programs + + "$mod, W, exec, ${config.default.browser}" + "$mod, D, exec, ${config.default.appLauncher}" + "$mod, L, exec, ${config.default.lockScreen}" + "$mod, Return, exec, ${config.default.terminal}" + ", Print, exec, grimblast copy area" + + # Misc + + "$mod SHIFT, L, exit" + "$mod, tab, hyprexpo:expo, toggle" + + # Window operations + + "$mod SHIFT, Q, killactive" + "$mod SHIFT, SPACE, togglefloating" + "$mod, F, fullscreen" + "$mod, J, togglesplit" + + # Move focus with mod + arrow keys + + "$mod, left, movefocus, l" + "$mod, right, movefocus, r" + "$mod, up, movefocus, u" + "$mod, down, movefocus, d" + + # Move window across workspace with mod + arrow keys + + "$mod SHIFT, left, hy3:movewindow, l" + "$mod SHIFT, right, hy3:movewindow, r" + "$mod SHIFT, up, hy3:movewindow, u" + "$mod SHIFT, down, hy3:movewindow, d" + + # Switch workspaces with mod + [0-9] + + "$mod, 1, workspace, 1" + "$mod, 2, workspace, 2" + "$mod, 3, workspace, 3" + "$mod, 4, workspace, 4" + "$mod, 5, workspace, 5" + "$mod, 6, workspace, 6" + "$mod, 7, workspace, 7" + "$mod, 8, workspace, 8" + "$mod, 9, workspace, 9" + + # Move active window to a workspace with mod + SHIFT + [0-9] + + "$mod SHIFT, 1, movetoworkspacesilent, 1" + "$mod SHIFT, 2, movetoworkspacesilent, 2" + "$mod SHIFT, 3, movetoworkspacesilent, 3" + "$mod SHIFT, 4, movetoworkspacesilent, 4" + "$mod SHIFT, 5, movetoworkspacesilent, 5" + "$mod SHIFT, 6, movetoworkspacesilent, 6" + "$mod SHIFT, 7, movetoworkspacesilent, 7" + "$mod SHIFT, 8, movetoworkspacesilent, 8" + "$mod SHIFT, 9, movetoworkspacesilent, 9" + "$mod SHIFT, 0, movetoworkspacesilent, 10" + + # Move to tab + + "LALT, 1, hy3:focustab, index, 01" + "LALT, 2, hy3:focustab, index, 02" + "LALT, 3, hy3:focustab, index, 03" + "LALT, 4, hy3:focustab, index, 04" + "LALT, 5, hy3:focustab, index, 05" + "LALT, 6, hy3:focustab, index, 06" + "LALT, 7, hy3:focustab, index, 07" + "LALT, 8, hy3:focustab, index, 08" + "LALT, 9, hy3:focustab, index, 09" + "LALT, 0, hy3:focustab, index, 10" + + "$mod SHIFT, B, hy3:makegroup, h" + "$mod SHIFT, V, hy3:makegroup, v" + "$mod SHIFT, C, hy3:changegroup, toggletab" + + # Scroll through existing workspaces with mod + scroll + + "$mod, mouse_down, workspace, e+1" + "$mod, mouse_up, workspace, e-1" + ]; + + bindn = [ + # Focus windows with scroll wheel or middle click + + ", mouse:272, hy3:focustab, mouse" + ", mouse_down, hy3:focustab, l, require_hovered" + ", mouse_up, hy3:focustab, r, require_hovered" + ]; + + bindm = [ + # Move/resize windows with mod + LMB/RMB and dragging + + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + ]; + + binde = [ + # Audio + + # raise volume + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" + # lower volume + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + # mute speaker + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + # mute mic + ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + + # Media + + # play + ", XF86AudioPlay, exec, playerctl play-pause" + # next + ", XF86AudioNext, exec, playerctl next" + # prev + ", XF86AudioPrev, exec, playerctl previous" + + # Backlight + + ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" + ", XF86MonBrightnessUp, exec, brightnessctl set 5%+" + ]; + + # Plugin configuration + plugin = { + # hy3 + hy3 = { + tabs = { + height = 24; + text_height = 9; + text_padding = 10; + padding = 2; + render_text = true; + text_font = "monospace"; + radius = config.theme.outerRadius; + border_width = config.theme.borderWidth; + + "col.active" = "${bg}"; + "col.active.border" = "${inactive}"; + "col.active.text" = "${fg}"; + "col.inactive" = "${bg}"; + "col.inactive.border" = "${inactive}"; + "col.inactive.text" = "${fg}"; + }; + + autotile = { + enable = true; + }; + }; + }; + + # XWayland + xwayland = { + force_zero_scaling = "true"; + use_nearest_neighbor = "false"; + }; + + # Misc + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + key_press_enables_dpms = true; + mouse_move_enables_dpms = true; + enable_anr_dialog = false; + vrr = 1; + }; + + # Ecosystem + ecosystem = { + no_update_news = true; + no_donation_nag = true; + }; + + # Experimental + experimental = { + xx_color_management_v4 = true; + }; + }; # end settings + }; # end hyprland + }; # end home-manager + }; +} diff --git a/modules/desktop/hyprlock.nix b/modules/desktop/hyprlock.nix new file mode 100644 index 0000000..9237be5 --- /dev/null +++ b/modules/desktop/hyprlock.nix @@ -0,0 +1,87 @@ +{ + config, + lib, + ... +}: let + fg = "rgb(${config.theme.colors.fg})"; + bg = "rgb(${config.theme.colors.bg})"; + error = "rgb(${config.theme.colors.error})"; + trans = "rgba(0,0,0,0)"; + + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.hyprlock { + default.lockScreen = lib.mkDefault "hyprlock"; + + home-manager.users.${config.user} = { + programs.hyprlock = { + enable = true; + + settings = { + background = { + path = config.theme.lockscreen; + color = bg; + blur_passes = 0; + blur_size = 2; + noise = 0; + contrast = 0; + brightness = 0; + vibrancy = 0; + vibrancy_darkness = 0.0; + }; + + # Password Input + input-field = { + size = "300, 30"; + outline_thickness = 0; + dots_size = 0.25; + dots_spacing = 0.55; + dots_center = true; + dots_rounding = -1; + outer_color = trans; + inner_color = trans; + font_color = fg; + fade_on_empty = false; + placeholder_text = "Enter Password"; + hide_input = false; + check_color = error; + fail_color = error; + capslock_color = -1; + numlock_color = -1; + bothlock_color = -1; + invert_numlock = false; + swap_font_color = false; + font_family = config.theme.font.regular; + position = "0, 50"; + halign = "center"; + valign = "bottom"; + }; + + label = [ + # Date + { + text = "cmd[update:1000] echo \"$(date +\"%A, %B %d\")\""; + color = fg; + font_size = 20; + font_family = config.theme.font.header; + position = "0, -100"; + halign = "center"; + valign = "top"; + } + # Clock + { + text = "cmd[update:1000] echo \"$(date +\"%k:%M:%S\")\""; + color = fg; + font_size = 90; + font_family = config.theme.font.header; + position = "0, -130"; + halign = "center"; + valign = "top"; + } + ]; + }; + }; + }; + }; +} diff --git a/modules/desktop/hyprpaper.nix b/modules/desktop/hyprpaper.nix new file mode 100644 index 0000000..045ae62 --- /dev/null +++ b/modules/desktop/hyprpaper.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.hyprpaper { + home-manager.users.${config.user} = { + services.hyprpaper = { + enable = true; + + settings = { + preload = config.theme.wallpaper; + wallpaper = ",${config.theme.wallpaper}"; + splash = false; + }; + }; + }; + }; +} diff --git a/modules/desktop/mako.nix b/modules/desktop/mako.nix new file mode 100644 index 0000000..17ed94f --- /dev/null +++ b/modules/desktop/mako.nix @@ -0,0 +1,35 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.mako { + home-manager.users.${config.user} = { + services.mako = { + enable = false; # now using astal + + settings = { + font = "${config.theme.font.monospace} 11"; + + margin = toString config.theme.outerGap; + padding = toString config.theme.innerGap; + + background-color = "#${config.theme.colors.bg}"; + progress-color = "#${config.theme.colors.primary}"; + text-color = "#${config.theme.colors.fg}"; + + border-color = "#${config.theme.colors.fg}"; + border-size = config.theme.borderWidth; + border-radius = config.theme.outerRadius; + + default-timeout = 5000; + layer = "overlay"; + icons = true; + }; + }; + }; + }; +} diff --git a/modules/desktop/waybar/default.nix b/modules/desktop/waybar/default.nix new file mode 100644 index 0000000..c2d6927 --- /dev/null +++ b/modules/desktop/waybar/default.nix @@ -0,0 +1,87 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.waybar { + home-manager.users.${config.user} = { + programs.waybar = { + enable = false; # using astal now + + settings = [ + { + height = 24; + layer = "top"; + position = "top"; + spacing = 4; + + modules-left = [ + "hyprland/workspaces" + ]; + modules-center = [ + "clock" + ]; + modules-right = [ + "battery" + "wireplumber" + "network" + "tray" + ]; + + "hyprland/workspaces" = { + disable-scroll = true; + all-outputs = true; + format = "{name}"; + }; + + battery = { + interval = 1; + states = { + warning = 30; + critical = 15; + }; + format = " {capacity}%"; + format-charging = " {capacity}%"; + format-plugged = " {capacity}%"; + format-full = " {capacity}%"; + format-warning = " {capacity}%"; + format-critical = " {capacity}%"; + }; + + wireplumber = { + format = " {volume}%"; + format-bluetooth = " {volume}%"; + format-muted = " muted"; + scroll-step = 1; + on-click = "pavucontrol"; + ignored-sinks = ["Easy Effects Sink"]; + }; + + network = { + format = " disconnected"; + format-wifi = " {essid}"; + format-ethernet = " {ipaddr}/{cidr}"; + format-disconnected = " disconnected"; + max-length = 50; + on-click = "nm-connection-editor"; + }; + + clock = { + interval = 1; + format = "{:%Y-%m-%d %a %H:%M:%S}"; + }; + + tray = { + spacing = config.theme.outerGap; + }; + } + ]; + + style = import ./style.nix {theme = config.theme;}; + }; + }; + }; +} diff --git a/programs/waybar/style.nix b/modules/desktop/waybar/style.nix index 33db673..33db673 100644 --- a/programs/waybar/style.nix +++ b/modules/desktop/waybar/style.nix diff --git a/modules/desktop/wofi/default.nix b/modules/desktop/wofi/default.nix new file mode 100644 index 0000000..aa04495 --- /dev/null +++ b/modules/desktop/wofi/default.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.desktop; +in { + config = mkIf cfg.wofi { + default.appLauncher = lib.mkDefault "wofi --show drun --prompt 'Seach Programs'"; + + home-manager.users.${config.user} = { + programs.wofi = { + enable = true; + + settings = { + key_expand = "Tab"; + term = "kitty"; + matching = "multi-contains"; + insensitive = true; + gtk_dark = true; + hide_scroll = true; + }; + + style = import ./style.nix {theme = config.theme;}; + }; + }; + }; +} diff --git a/programs/wofi/style.nix b/modules/desktop/wofi/style.nix index 27b7205..27b7205 100644 --- a/programs/wofi/style.nix +++ b/modules/desktop/wofi/style.nix diff --git a/modules/development/default.nix b/modules/development/default.nix new file mode 100644 index 0000000..486a220 --- /dev/null +++ b/modules/development/default.nix @@ -0,0 +1,49 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (lib) mkEnableOption optionals; + cfg = config.development; +in { + options.development = { + c = mkEnableOption "Enable c/c++ development tools."; + java = mkEnableOption "Enable java/kotlin development tools."; + rust = mkEnableOption "Enable rust development tools."; + zig = mkEnableOption "Enable zig development tools."; + }; + + config = { + home-manager.users.${config.user} = { + home.packages = with pkgs; + (optionals cfg.c [ + clang-tools + gcc + gdb + gnumake + nasm + pkg-config + ]) + ++ (optionals cfg.rust [ + rustc + rustfmt + rust-analyzer + cargo + clippy + ]) + ++ (optionals cfg.java [ + gradle + jdk + jdt-language-server + kotlin + kotlin-language-server + maven + ]) + ++ (optionals cfg.zig [ + zig + zls + ]); + }; + }; +} diff --git a/modules/gaming/default.nix b/modules/gaming/default.nix new file mode 100644 index 0000000..a0c826c --- /dev/null +++ b/modules/gaming/default.nix @@ -0,0 +1,19 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkEnableOption; +in { + imports = [ + ./homestuck.nix + ./minecraft.nix + ./steam.nix + ]; + + options.gaming = { + homestuck = mkEnableOption "Install the unofficial homestuck collection."; + minecraft = mkEnableOption "Install the minecraft block game."; + steam = mkEnableOption "Install the steam game launcher."; + }; +} diff --git a/modules/gaming/homestuck.nix b/modules/gaming/homestuck.nix new file mode 100644 index 0000000..12641a4 --- /dev/null +++ b/modules/gaming/homestuck.nix @@ -0,0 +1,19 @@ +{ + lib, + config, + pkgs, + inputs, + ... +}: let + inherit (lib) mkIf; + cfg = config.gaming; + system = pkgs.stdenv.hostPlatform.system; +in { + config = mkIf cfg.homestuck { + home-manager.users.${config.user} = { + home.packages = [ + inputs.self.packages.${system}.unofficial-homestuck-collection + ]; + }; + }; +} diff --git a/modules/gaming/minecraft.nix b/modules/gaming/minecraft.nix new file mode 100644 index 0000000..5de20e6 --- /dev/null +++ b/modules/gaming/minecraft.nix @@ -0,0 +1,17 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (lib) mkIf; + cfg = config.gaming; +in { + config = mkIf cfg.minecraft { + home-manager.users.${config.user} = { + home.packages = with pkgs; [ + prismlauncher + ]; + }; + }; +} diff --git a/modules/gaming/steam.nix b/modules/gaming/steam.nix new file mode 100644 index 0000000..53ab252 --- /dev/null +++ b/modules/gaming/steam.nix @@ -0,0 +1,34 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkIf; + cfg = config.gaming; +in { + config = mkIf cfg.steam { + nixpkgs.config.allowUnfreePredicate = pkg: + builtins.elem (lib.getName pkg) [ + "steam" + "steam-original" + "steam-runtime" + ]; + + programs.gamescope = { + enable = true; + capSysNice = true; + }; + + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + gamescopeSession.enable = true; + }; + + # controllers + hardware.xone.enable = true; + hardware.steam-hardware.enable = true; + }; +} diff --git a/modules/terminal/default.nix b/modules/terminal/default.nix new file mode 100644 index 0000000..8e9d5f8 --- /dev/null +++ b/modules/terminal/default.nix @@ -0,0 +1,15 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkEnableOption; +in { + imports = [ + ./kitty.nix + ]; + + options.terminal = { + kitty = mkEnableOption "Enable the kitty terminal."; + }; +} diff --git a/modules/terminal/kitty.nix b/modules/terminal/kitty.nix new file mode 100644 index 0000000..88aa151 --- /dev/null +++ b/modules/terminal/kitty.nix @@ -0,0 +1,84 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.terminal; +in { + config = mkIf cfg.kitty { + default.terminal = lib.mkDefault "kitty"; + + home-manager.users.${config.user} = { + programs.kitty = { + enable = true; + environment = {}; + extraConfig = ""; + + settings = { + # Font + font_family = config.theme.font.monospace; + font_size = 11; + bold_font = "auto"; + italic_font = "auto"; + bold_italic_font = "auto"; + + # Scrollback + scrollback_lines = 10000; + scrollback_pager_history_size = 300; # MB + + # Urls + detect_urls = true; + show_hyperlink_targets = false; + + # Window + window_padding_width = config.theme.outerGap; + window_border_width = 0; + draw_minimal_borders = true; + background_opacity = config.theme.opacity; + + # Disable audio + enable_audio_bell = false; + + # Disable close prompt + confirm_os_window_close = 0; + + # colors + background = "#${config.theme.colors.bg}"; + foreground = "#${config.theme.colors.fg}"; + selection_background = "#${config.theme.colors.surface.bg}"; + selection_foreground = "#${config.theme.colors.surface.fg}"; + url_color = "#${config.theme.colors.bright.yellow}"; + cursor = "#${config.theme.colors.fg}"; + active_border_color = "#${config.theme.colors.primary}"; + inactive_border_color = "#${config.theme.colors.bg}"; + active_tab_background = "#${config.theme.colors.bg}"; + active_tab_foreground = "#${config.theme.colors.fg}"; + inactive_tab_background = "#${config.theme.colors.bg}"; + inactive_tab_foreground = "#${config.theme.colors.fg}"; + tab_bar_background = "#${config.theme.colors.bg}"; + + # normal + color0 = "#${config.theme.colors.normal.black}"; + color1 = "#${config.theme.colors.normal.red}"; + color2 = "#${config.theme.colors.normal.green}"; + color3 = "#${config.theme.colors.normal.yellow}"; + color4 = "#${config.theme.colors.normal.blue}"; + color5 = "#${config.theme.colors.normal.magenta}"; + color6 = "#${config.theme.colors.normal.cyan}"; + color7 = "#${config.theme.colors.normal.white}"; + + # bright + color8 = "#${config.theme.colors.bright.black}"; + color9 = "#${config.theme.colors.bright.red}"; + color10 = "#${config.theme.colors.bright.green}"; + color11 = "#${config.theme.colors.bright.yellow}"; + color12 = "#${config.theme.colors.bright.blue}"; + color13 = "#${config.theme.colors.bright.magenta}"; + color14 = "#${config.theme.colors.bright.cyan}"; + color15 = "#${config.theme.colors.bright.white}"; + }; + }; + }; + }; +} diff --git a/modules/virt/default.nix b/modules/virt/default.nix new file mode 100644 index 0000000..c5d3960 --- /dev/null +++ b/modules/virt/default.nix @@ -0,0 +1,19 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (lib) mkEnableOption; + cfg = config.virt; +in { + imports = [ + ./docker.nix + ./qemu.nix + ]; + + options.virt = { + docker = mkEnableOption "Install docker and its components."; + qemu = mkEnableOption "Install qemu and its components."; + }; +} diff --git a/modules/virt/docker.nix b/modules/virt/docker.nix new file mode 100644 index 0000000..5930858 --- /dev/null +++ b/modules/virt/docker.nix @@ -0,0 +1,15 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (lib) mkIf; + cfg = config.virt; +in { + config = mkIf cfg.docker { + virtualisation.docker.enable = true; + virtualisation.docker.storageDriver = "btrfs"; + users.groups.docker.members = [config.user]; + }; +} diff --git a/modules/virt/qemu.nix b/modules/virt/qemu.nix new file mode 100644 index 0000000..f5d9d24 --- /dev/null +++ b/modules/virt/qemu.nix @@ -0,0 +1,20 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (lib) mkIf; + cfg = config.virt; +in { + config = mkIf cfg.qemu { + programs.virt-manager.enable = true; + users.groups.libvirtd.members = [config.user]; + virtualisation.libvirtd.enable = true; + virtualisation.spiceUSBRedirection.enable = true; + + environment.systemPackages = with pkgs; [ + qemu + ]; + }; +} diff --git a/programs/astal/default.nix b/programs/astal/default.nix deleted file mode 100644 index 1b43dbe..0000000 --- a/programs/astal/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - lib, - config, - pkgs, - inputs, - ... -}: let - system = pkgs.stdenv.hostPlatform.system; - astal = inputs.self.packages.${system}; -in { - default.appLauncher = lib.mkDefault "astal-launcher"; - - home-manager.users.${config.user} = { - home.packages = [ - astal.astal.shell - astal.astal.launcher - ]; - }; -} diff --git a/programs/default.nix b/programs/default.nix deleted file mode 100644 index 692113e..0000000 --- a/programs/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{...}: { - imports = [ - ./astal - ./firefox - ./git - ./gpg - ./hypr - ./kitty - ./mako - ./neovim - ./ssh - ./starship - ./steam - ./talc - ./tmux - ./unofficial-homestuck-collection - ./waybar - ./wofi - ./zsh - ]; -} diff --git a/programs/firefox/default.nix b/programs/firefox/default.nix deleted file mode 100644 index 58aa83c..0000000 --- a/programs/firefox/default.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - extraPrefs = import ./extraPrefs.nix; - - userChrome = import ./userChrome.nix; - - my-firefox = pkgs.firefox.override { - extraPrefs = extraPrefs; - }; -in { - default.browser = lib.mkDefault "firefox"; - - home-manager.users.${config.user} = { - programs.firefox = { - enable = true; - package = my-firefox; - - # import configuration - policies = import ./policy.nix; - - # create profile for me :3 - profiles.${config.user} = { - search = { - force = true; - default = "ddg"; - }; - - userChrome = userChrome; - }; - }; - }; -} diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix deleted file mode 100644 index 4a6bd01..0000000 --- a/programs/hypr/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{...}: { - imports = [ - ./hypridle.nix - ./hyprland.nix - ./hyprlock.nix - ./hyprpaper.nix - ]; -} diff --git a/programs/hypr/hypridle.nix b/programs/hypr/hypridle.nix deleted file mode 100644 index e481e74..0000000 --- a/programs/hypr/hypridle.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - config, - lib, - ... -}: { - home-manager.users.${config.user} = { - services.hypridle = { - enable = true; - - settings = { - general = { - lock_cmd = "pidof hyprlock || hyprlock"; - before_sleep_cmd = "loginctl lock-session"; - after_sleep_cmd = "hyprctl dispatch dpms on"; - ignore_dbus_inhibit = false; - }; - - listener = [ - # dim screen - { - timeout = 150; - on-timeout = "brightnessctl -s set 10"; - on-resume = "brightnessctl -r"; - } - # lock - { - timeout = 300; - on-timeout = "loginctl lock-session"; - } - # turn off screen - { - timeout = 350; - on-timeout = "hyprctl dispatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; - } - ]; - }; - }; - }; -} diff --git a/programs/hypr/hyprland.nix b/programs/hypr/hyprland.nix deleted file mode 100644 index a37be7f..0000000 --- a/programs/hypr/hyprland.nix +++ /dev/null @@ -1,348 +0,0 @@ -{ - config, - pkgs, - lib, - inputs, - ... -}: let - system = pkgs.stdenv.hostPlatform.system; - hyprland = inputs.hyprland.packages.${system}; - hyprland-plugins = inputs.hyprland-plugins.packages.${system}; - hy3 = inputs.hy3.packages.${system}; - - fg = "rgb(${config.theme.colors.fg})"; - bg = "rgb(${config.theme.colors.bg})"; - primary = "rgb(${config.theme.colors.primary})"; - inactive = "rgb(${config.theme.colors.surface.bg})"; - - debug = false; -in { - environment = { - variables = { - HYPRLAND_TRACE = - if debug - then "1" - else "0"; - AQ_TRACE = - if debug - then "1" - else "0"; - - XDG_CURRENT_DESKTOP = "Hyprland"; - XDG_SESSION_TYPE = "wayland"; - XDG_SESSION_DESKTOP = "Hyprland"; - LIBSEAT_BACKEND = "logind"; - }; - sessionVariables = { - XCURSOR_THEME = "Adwaita"; - XCURSOR_SIZE = "24"; - - GTK_THEME = "Orchis-Teal-Dark"; - - MOZ_ENABLE_WAYLAND = "1"; - MOZ_USE_XINPUT = "1"; - _JAVA_AWT_WM_NONREPARENTING = "1"; - }; - }; - - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - config = { - common.default = ["gtk"]; - hyprland.default = ["gtk" "hyprland"]; - }; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - pkgs.xdg-desktop-portal-wlr - hyprland.xdg-desktop-portal-hyprland - ]; - }; - - programs.xwayland.enable = true; - - home-manager.users.${config.user} = { - wayland.windowManager.hyprland = { - enable = true; - package = hyprland.hyprland; - - xwayland.enable = true; - systemd.enable = true; - - # Plugins - plugins = [ - hyprland-plugins.hyprexpo - hy3.hy3 - ]; - - # Config - settings = { - # Debug - debug.disable_logs = ! debug; - debug.disable_time = ! debug; - debug.enable_stdout_logs = debug; - - # Monitors - monitor = - map ( - monitor: "${monitor.name}, highres, auto, ${toString monitor.scale}, bitdepth, ${toString monitor.bitdepth}" - ) - config.monitors; - - # Autostart - exec-once = config.autoRun; - - # General - general = { - gaps_in = config.theme.innerGap; - gaps_out = config.theme.outerGap; - layout = "hy3"; - resize_on_border = "yes"; - extend_border_grab_area = 20; - border_size = config.theme.borderWidth; - "col.active_border" = "${primary}"; - "col.inactive_border" = "${inactive}"; - }; - - # Gestures - gestures = { - workspace_swipe = true; - workspace_swipe_fingers = 3; - workspace_swipe_forever = true; - workspace_swipe_cancel_ratio = 0.15; - }; - - # Decoration - decoration = { - rounding = config.theme.outerRadius; - shadow.enabled = false; - blur = { - enabled = config.theme.blur; - size = 4; - passes = 2; - noise = 0.008; - contrast = 0.8916; - brightness = 0.8; - }; - }; - - # Animations - animations = { - enabled = true; - - bezier = [ - "windowIn, 0.06, 0.71, 0.25, 1" - "windowResize, 0.04, 0.67, 0.38, 1" - ]; - - animation = [ - "windowsIn, 1, 3, windowIn, slide #popin 20%" - "windowsOut, 1, 3, windowIn, slide #popin 70%" - "windowsMove, 1, 2.5, windowResize" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 3, default" - "workspaces, 1, 6, default" - "layers, 1, 5, windowIn, slide" - ]; - }; - - # Input - input = { - kb_layout = "us"; - kb_variant = ""; - kb_model = ""; - kb_options = "gtp:alt_shift_toggle, compose:ralt"; - kb_rules = ""; - follow_mouse = 1; - touchpad = { - natural_scroll = "yes"; - }; - sensitivity = 0; - }; - - # Keybinds - "$mod" = "SUPER"; - bind = [ - # Launch programs - - "$mod, W, exec, ${config.default.browser}" - "$mod, D, exec, ${config.default.appLauncher}" - "$mod, L, exec, ${config.default.lockScreen}" - "$mod, Return, exec, ${config.default.terminal}" - ", Print, exec, grimblast copy area" - - # Misc - - "$mod SHIFT, L, exit" - "$mod, tab, hyprexpo:expo, toggle" - - # Window operations - - "$mod SHIFT, Q, killactive" - "$mod SHIFT, SPACE, togglefloating" - "$mod, F, fullscreen" - "$mod, J, togglesplit" - - # Move focus with mod + arrow keys - - "$mod, left, movefocus, l" - "$mod, right, movefocus, r" - "$mod, up, movefocus, u" - "$mod, down, movefocus, d" - - # Move window across workspace with mod + arrow keys - - "$mod SHIFT, left, hy3:movewindow, l" - "$mod SHIFT, right, hy3:movewindow, r" - "$mod SHIFT, up, hy3:movewindow, u" - "$mod SHIFT, down, hy3:movewindow, d" - - # Switch workspaces with mod + [0-9] - - "$mod, 1, workspace, 1" - "$mod, 2, workspace, 2" - "$mod, 3, workspace, 3" - "$mod, 4, workspace, 4" - "$mod, 5, workspace, 5" - "$mod, 6, workspace, 6" - "$mod, 7, workspace, 7" - "$mod, 8, workspace, 8" - "$mod, 9, workspace, 9" - - # Move active window to a workspace with mod + SHIFT + [0-9] - - "$mod SHIFT, 1, movetoworkspacesilent, 1" - "$mod SHIFT, 2, movetoworkspacesilent, 2" - "$mod SHIFT, 3, movetoworkspacesilent, 3" - "$mod SHIFT, 4, movetoworkspacesilent, 4" - "$mod SHIFT, 5, movetoworkspacesilent, 5" - "$mod SHIFT, 6, movetoworkspacesilent, 6" - "$mod SHIFT, 7, movetoworkspacesilent, 7" - "$mod SHIFT, 8, movetoworkspacesilent, 8" - "$mod SHIFT, 9, movetoworkspacesilent, 9" - "$mod SHIFT, 0, movetoworkspacesilent, 10" - - # Move to tab - - "LALT, 1, hy3:focustab, index, 01" - "LALT, 2, hy3:focustab, index, 02" - "LALT, 3, hy3:focustab, index, 03" - "LALT, 4, hy3:focustab, index, 04" - "LALT, 5, hy3:focustab, index, 05" - "LALT, 6, hy3:focustab, index, 06" - "LALT, 7, hy3:focustab, index, 07" - "LALT, 8, hy3:focustab, index, 08" - "LALT, 9, hy3:focustab, index, 09" - "LALT, 0, hy3:focustab, index, 10" - - "$mod SHIFT, B, hy3:makegroup, h" - "$mod SHIFT, V, hy3:makegroup, v" - "$mod SHIFT, C, hy3:changegroup, toggletab" - - # Scroll through existing workspaces with mod + scroll - - "$mod, mouse_down, workspace, e+1" - "$mod, mouse_up, workspace, e-1" - ]; - - bindn = [ - # Focus windows with scroll wheel or middle click - - ", mouse:272, hy3:focustab, mouse" - ", mouse_down, hy3:focustab, l, require_hovered" - ", mouse_up, hy3:focustab, r, require_hovered" - ]; - - bindm = [ - # Move/resize windows with mod + LMB/RMB and dragging - - "$mod, mouse:272, movewindow" - "$mod, mouse:273, resizewindow" - ]; - - binde = [ - # Audio - - # raise volume - ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" - # lower volume - ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" - # mute speaker - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - # mute mic - ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - - # Media - - # play - ", XF86AudioPlay, exec, playerctl play-pause" - # next - ", XF86AudioNext, exec, playerctl next" - # prev - ", XF86AudioPrev, exec, playerctl previous" - - # Backlight - - ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" - ", XF86MonBrightnessUp, exec, brightnessctl set 5%+" - ]; - - # Plugin configuration - plugin = { - # hy3 - hy3 = { - tabs = { - height = 24; - text_height = 9; - text_padding = 10; - padding = 2; - render_text = true; - text_font = "monospace"; - radius = config.theme.outerRadius; - border_width = config.theme.borderWidth; - - "col.active" = "${bg}"; - "col.active.border" = "${inactive}"; - "col.active.text" = "${fg}"; - "col.inactive" = "${bg}"; - "col.inactive.border" = "${inactive}"; - "col.inactive.text" = "${fg}"; - }; - - autotile = { - enable = true; - }; - }; - }; - - # XWayland - xwayland = { - force_zero_scaling = "true"; - use_nearest_neighbor = "false"; - }; - - # Misc - misc = { - disable_hyprland_logo = true; - disable_splash_rendering = true; - key_press_enables_dpms = true; - mouse_move_enables_dpms = true; - enable_anr_dialog = false; - vrr = 1; - }; - - # Ecosystem - ecosystem = { - no_update_news = true; - no_donation_nag = true; - }; - - # Experimental - experimental = { - xx_color_management_v4 = true; - }; - }; # end settings - }; # end hyprland - }; # end home-manager -} diff --git a/programs/hypr/hyprlock.nix b/programs/hypr/hyprlock.nix deleted file mode 100644 index 130f379..0000000 --- a/programs/hypr/hyprlock.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ - config, - lib, - ... -}: let - fg = "rgb(${config.theme.colors.fg})"; - bg = "rgb(${config.theme.colors.bg})"; - error = "rgb(${config.theme.colors.error})"; - trans = "rgba(0,0,0,0)"; -in { - default.lockScreen = lib.mkDefault "hyprlock"; - - home-manager.users.${config.user} = { - programs.hyprlock = { - enable = true; - - settings = { - background = { - path = config.theme.lockscreen; - color = bg; - blur_passes = 0; - blur_size = 2; - noise = 0; - contrast = 0; - brightness = 0; - vibrancy = 0; - vibrancy_darkness = 0.0; - }; - - # Password Input - input-field = { - size = "300, 30"; - outline_thickness = 0; - dots_size = 0.25; - dots_spacing = 0.55; - dots_center = true; - dots_rounding = -1; - outer_color = trans; - inner_color = trans; - font_color = fg; - fade_on_empty = false; - placeholder_text = "Enter Password"; - hide_input = false; - check_color = error; - fail_color = error; - capslock_color = -1; - numlock_color = -1; - bothlock_color = -1; - invert_numlock = false; - swap_font_color = false; - font_family = config.theme.font.regular; - position = "0, 50"; - halign = "center"; - valign = "bottom"; - }; - - label = [ - # Date - { - text = "cmd[update:1000] echo \"$(date +\"%A, %B %d\")\""; - color = fg; - font_size = 20; - font_family = config.theme.font.header; - position = "0, -100"; - halign = "center"; - valign = "top"; - } - # Clock - { - text = "cmd[update:1000] echo \"$(date +\"%k:%M:%S\")\""; - color = fg; - font_size = 90; - font_family = config.theme.font.header; - position = "0, -130"; - halign = "center"; - valign = "top"; - } - ]; - }; - }; - }; -} diff --git a/programs/hypr/hyprpaper.nix b/programs/hypr/hyprpaper.nix deleted file mode 100644 index 13641b7..0000000 --- a/programs/hypr/hyprpaper.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - config, - lib, - ... -}: { - home-manager.users.${config.user} = { - services.hyprpaper = { - enable = true; - - settings = { - preload = config.theme.wallpaper; - wallpaper = ",${config.theme.wallpaper}"; - splash = false; - }; - }; - }; -} diff --git a/programs/kitty/default.nix b/programs/kitty/default.nix deleted file mode 100644 index eac223b..0000000 --- a/programs/kitty/default.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - config, - lib, - ... -}: { - default.terminal = lib.mkDefault "kitty"; - - home-manager.users.${config.user} = { - programs.kitty = { - enable = true; - environment = {}; - extraConfig = ""; - - settings = { - # Font - font_family = config.theme.font.monospace; - font_size = 11; - bold_font = "auto"; - italic_font = "auto"; - bold_italic_font = "auto"; - - # Scrollback - scrollback_lines = 10000; - scrollback_pager_history_size = 300; # MB - - # Urls - detect_urls = true; - show_hyperlink_targets = false; - - # Window - window_padding_width = config.theme.outerGap; - window_border_width = 0; - draw_minimal_borders = true; - background_opacity = config.theme.opacity; - - # Disable audio - enable_audio_bell = false; - - # Disable close prompt - confirm_os_window_close = 0; - - # colors - background = "#${config.theme.colors.bg}"; - foreground = "#${config.theme.colors.fg}"; - selection_background = "#${config.theme.colors.surface.bg}"; - selection_foreground = "#${config.theme.colors.surface.fg}"; - url_color = "#${config.theme.colors.bright.yellow}"; - cursor = "#${config.theme.colors.fg}"; - active_border_color = "#${config.theme.colors.primary}"; - inactive_border_color = "#${config.theme.colors.bg}"; - active_tab_background = "#${config.theme.colors.bg}"; - active_tab_foreground = "#${config.theme.colors.fg}"; - inactive_tab_background = "#${config.theme.colors.bg}"; - inactive_tab_foreground = "#${config.theme.colors.fg}"; - tab_bar_background = "#${config.theme.colors.bg}"; - - # normal - color0 = "#${config.theme.colors.normal.black}"; - color1 = "#${config.theme.colors.normal.red}"; - color2 = "#${config.theme.colors.normal.green}"; - color3 = "#${config.theme.colors.normal.yellow}"; - color4 = "#${config.theme.colors.normal.blue}"; - color5 = "#${config.theme.colors.normal.magenta}"; - color6 = "#${config.theme.colors.normal.cyan}"; - color7 = "#${config.theme.colors.normal.white}"; - - # bright - color8 = "#${config.theme.colors.bright.black}"; - color9 = "#${config.theme.colors.bright.red}"; - color10 = "#${config.theme.colors.bright.green}"; - color11 = "#${config.theme.colors.bright.yellow}"; - color12 = "#${config.theme.colors.bright.blue}"; - color13 = "#${config.theme.colors.bright.magenta}"; - color14 = "#${config.theme.colors.bright.cyan}"; - color15 = "#${config.theme.colors.bright.white}"; - }; - }; - }; -} diff --git a/programs/mako/default.nix b/programs/mako/default.nix deleted file mode 100644 index 94b0cd9..0000000 --- a/programs/mako/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - config, - lib, - ... -}: { - home-manager.users.${config.user} = { - services.mako = { - enable = false; # now using astal - - settings = { - font = "${config.theme.font.monospace} 11"; - - margin = toString config.theme.outerGap; - padding = toString config.theme.innerGap; - - background-color = "#${config.theme.colors.bg}"; - progress-color = "#${config.theme.colors.primary}"; - text-color = "#${config.theme.colors.fg}"; - - border-color = "#${config.theme.colors.fg}"; - border-size = config.theme.borderWidth; - border-radius = config.theme.outerRadius; - - default-timeout = 5000; - layer = "overlay"; - icons = true; - }; - }; - }; -} diff --git a/programs/steam/default.nix b/programs/steam/default.nix deleted file mode 100644 index 65deeaa..0000000 --- a/programs/steam/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{lib, ...}: { - nixpkgs.config.allowUnfreePredicate = pkg: - builtins.elem (lib.getName pkg) [ - "steam" - "steam-original" - "steam-runtime" - ]; - - programs.gamescope = { - enable = true; - capSysNice = true; - }; - - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - localNetworkGameTransfers.openFirewall = true; - gamescopeSession.enable = true; - }; - - # controllers - hardware.xone.enable = true; - hardware.steam-hardware.enable = true; -} diff --git a/programs/talc/default.nix b/programs/talc/default.nix deleted file mode 100644 index 92ba578..0000000 --- a/programs/talc/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - pkgs, - inputs, - ... -}: let - system = pkgs.stdenv.hostPlatform.system; - talc = inputs.talc.packages.${system}; -in { - home-manager.users.${config.user} = { - home.packages = [ - talc.talc - ]; - }; -} diff --git a/programs/unofficial-homestuck-collection/default.nix b/programs/unofficial-homestuck-collection/default.nix deleted file mode 100644 index 834bc5c..0000000 --- a/programs/unofficial-homestuck-collection/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - pkgs, - inputs, - ... -}: let - system = pkgs.stdenv.hostPlatform.system; - unofficial-homestuck-collection = inputs.self.packages.${system}; -in { - home-manager.users.${config.user} = { - home.packages = [ - unofficial-homestuck-collection.unofficial-homestuck-collection - ]; - }; -} diff --git a/programs/waybar/default.nix b/programs/waybar/default.nix deleted file mode 100644 index 7602a82..0000000 --- a/programs/waybar/default.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ - config, - lib, - ... -}: { - home-manager.users.${config.user} = { - programs.waybar = { - enable = false; # using astal now - - settings = [ - { - height = 24; - layer = "top"; - position = "top"; - spacing = 4; - - modules-left = [ - "hyprland/workspaces" - ]; - modules-center = [ - "clock" - ]; - modules-right = [ - "battery" - "wireplumber" - "network" - "tray" - ]; - - "hyprland/workspaces" = { - disable-scroll = true; - all-outputs = true; - format = "{name}"; - }; - - battery = { - interval = 1; - states = { - warning = 30; - critical = 15; - }; - format = " {capacity}%"; - format-charging = " {capacity}%"; - format-plugged = " {capacity}%"; - format-full = " {capacity}%"; - format-warning = " {capacity}%"; - format-critical = " {capacity}%"; - }; - - wireplumber = { - format = " {volume}%"; - format-bluetooth = " {volume}%"; - format-muted = " muted"; - scroll-step = 1; - on-click = "pavucontrol"; - ignored-sinks = ["Easy Effects Sink"]; - }; - - network = { - format = " disconnected"; - format-wifi = " {essid}"; - format-ethernet = " {ipaddr}/{cidr}"; - format-disconnected = " disconnected"; - max-length = 50; - on-click = "nm-connection-editor"; - }; - - clock = { - interval = 1; - format = "{:%Y-%m-%d %a %H:%M:%S}"; - }; - - tray = { - spacing = config.theme.outerGap; - }; - } - ]; - - style = import ./style.nix {theme = config.theme;}; - }; - }; -} diff --git a/programs/wofi/default.nix b/programs/wofi/default.nix deleted file mode 100644 index add0c26..0000000 --- a/programs/wofi/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - ... -}: { - #default.appLauncher = lib.mkDefault "wofi --show drun --prompt 'Seach Programs'"; - - home-manager.users.${config.user} = { - programs.wofi = { - enable = true; - - settings = { - key_expand = "Tab"; - term = "kitty"; - matching = "multi-contains"; - insensitive = true; - gtk_dark = true; - hide_scroll = true; - }; - - style = import ./style.nix {theme = config.theme;}; - }; - }; -} diff --git a/system/default.nix b/system/default.nix index a026eb1..4695ea6 100644 --- a/system/default.nix +++ b/system/default.nix @@ -4,6 +4,11 @@ pkgs, ... }: { + imports = [ + ./hardware.nix + ./sshd.nix + ]; + # allow flakes nix.settings.experimental-features = ["nix-command" "flakes"]; @@ -121,15 +126,11 @@ openFirewall = true; }; - # docker - virtualisation.docker.enable = true; - virtualisation.docker.storageDriver = "btrfs"; - # create user account users.users.${config.user} = { isNormalUser = true; description = config.fullName; - extraGroups = ["networkmanager" "wheel" "sys" "video" "audio" "docker" "libvirtd"]; + extraGroups = ["networkmanager" "wheel" "sys" "video" "audio"]; home = config.homePath; shell = pkgs.zsh; }; @@ -139,62 +140,4 @@ ../files/certs/freyanet.crt ../files/certs/tinternet.crt ]; - - # mime - environment.pathsToLink = [ - "/share/mime" - ]; - - # fonts - fonts.packages = - (with pkgs; [ - corefonts - dejavu_fonts - fira-code - fira-code-symbols - jetbrains-mono - material-icons - nerd-fonts.fira-code - noto-fonts - noto-fonts-cjk-sans - noto-fonts-emoji - twemoji-color-font - vistafonts - ]) - ++ (with inputs.apple-fonts.packages.${pkgs.system}; [ - sf-pro - sf-mono - sf-compact - ]); - - fonts.fontconfig = { - enable = true; - defaultFonts = { - serif = [ - "Twemoji" - "DejaVu Serif" - ]; - sansSerif = [ - "Twemoji" - "DejaVu Sans" - ]; - monospace = [ - "Fira Code" - "FiraCode Nerd Font Mono" - "Font Awesome 6 Pro Regular" - "Twemoji" - "DejaVu Sans Mono" - ]; - emoji = [ - "Twemoji" - "Noto Color Emoji" - ]; - }; - }; - - # vms - programs.virt-manager.enable = true; - users.groups.libvirtd.members = [config.user]; - virtualisation.libvirtd.enable = true; - virtualisation.spiceUSBRedirection.enable = true; } diff --git a/system/hardware.nix b/system/hardware.nix new file mode 100644 index 0000000..853a6cc --- /dev/null +++ b/system/hardware.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + # yubikey support + services = { + pcscd.enable = true; + udev.packages = with pkgs; [ + yubikey-personalization + ]; + }; +} diff --git a/programs/ssh/default.nix b/system/sshd.nix index b6ecb1d..0e0f1a2 100644 --- a/programs/ssh/default.nix +++ b/system/sshd.nix @@ -1,16 +1,4 @@ -{ - config, - lib, - ... -}: { - # ssh config - home-manager.users.${config.user} = { - programs.ssh = { - enable = true; - extraConfig = lib.fileContents ./config; - }; - }; - +{config, ...}: { # sshd services.openssh = { enable = true; @@ -39,7 +27,7 @@ # add authorized keys users.users.${config.user} = { openssh.authorizedKeys.keyFiles = [ - ../../files/keys/ssh.pub + ../files/keys/ssh.pub ]; }; } |