diff --git a/common/_containers/forgejo.nix b/common/_containers/forgejo.nix deleted file mode 100644 index 92793a9..0000000 --- a/common/_containers/forgejo.nix +++ /dev/null @@ -1,196 +0,0 @@ -{ - config, - lib, - ... -}: -let - name = "forgejo"; - - hostDataDir = "/var/lib/${name}"; - - hostAddress = "10.0.0.1"; - containerAddress = "10.0.0.2"; - hostAddress6 = "fc00::1"; - containerAddress6 = "fc00::2"; - - binds = [ - # Postgres data, must use postgres user in container and host - { - host = "${hostDataDir}/postgres"; - # Adjust based on container postgres data dir - container = "/var/lib/postgresql/17"; - user = "postgres"; - uid = config.ids.uids.postgres; - gid = config.ids.gids.postgres; - } - # Postgres backups - { - host = "${hostDataDir}/backups/postgres"; - container = "/var/backup/postgresql"; - user = "postgres"; - uid = config.ids.uids.postgres; - gid = config.ids.gids.postgres; - } - # App data, uses custom user uid - { - host = "${hostDataDir}/data"; - container = "/var/lib/forgejo"; - user = "forgejo"; - uid = 115; - gid = 115; - } - ]; - uniqueUsers = lib.foldl' ( - acc: bind: if lib.lists.any (item: item.user == bind.user) acc then acc else acc ++ [ bind ] - ) [ ] binds; - users = { - users = lib.listToAttrs ( - lib.map (u: { - name = u.user; - value = { - isSystemUser = true; - name = u.user; - uid = u.uid; - group = u.user; - }; - }) uniqueUsers - ); - - groups = lib.listToAttrs ( - lib.map (g: { - name = g.user; - value.gid = g.gid; - }) uniqueUsers - ); - }; -in -{ - # Ensure users exists on host machine with same IDs as container - inherit users; - - # Ensure directories exist on host machine - system.activationScripts.createMediaServerDirs = '' - ${lib.concatStringsSep "\n" ( - lib.map (bind: '' - mkdir -p ${bind.host} - chown -R ${toString bind.user}:${toString bind.gid} ${bind.host} - chmod -R 750 ${bind.host} - '') binds - )} - ''; - - containers.${name} = { - ephemeral = true; - autoStart = true; - privateNetwork = true; - hostAddress = hostAddress; - localAddress = containerAddress; - hostAddress6 = hostAddress6; - localAddress6 = containerAddress6; - bindMounts = lib.foldl ( - acc: bind: - { - "${bind.container}" = { - hostPath = bind.host; - isReadOnly = false; - }; - } - // acc - ) { } binds; - config = - { config, pkgs, ... }: - { - system.stateVersion = "24.11"; - - networking = { - firewall = { - enable = true; - allowedTCPPorts = [ - 3000 - 3032 - ]; - }; - # Use systemd-resolved inside the container - # Workaround for bug https://github.com/NixOS/nixpkgs/issues/162686 - useHostResolvConf = lib.mkForce false; - }; - services.resolved.enable = true; - - # Ensure users exist on container - inherit users; - - services.postgresql = { - enable = true; - package = pkgs.postgresql_17.withJIT; - enableJIT = true; - authentication = '' - local all all trust - host all all 127.0.0.1/8 trust - host all all ::1/128 trust - host all all fc00::1/128 trust - ''; - }; - - # Backup database - services.postgresqlBackup = { - enable = true; - }; - - services.forgejo = { - enable = true; - dump = { - enable = false; - type = "tar.gz"; - }; - database = { - type = "postgres"; - }; - settings = { - DEFAULT = { - APP_NAME = "Josh's Git"; - }; - server = { - PROTOCOL = "http"; - DOMAIN = "git.joshuabell.xyz"; - HTTP_ADDR = "0.0.0.0"; - HTTP_PORT = 3000; - - START_SSH_SERVER = true; - SSH_DOMAIN = "git.joshuabell.xyz"; - SSH_LISTEN_HOST = "0.0.0.0"; - SSH_LISTEN_PORT = 3032; # actual listen port - SSH_PORT = 3032; # used in UI - BUILTIN_SSH_SERVER_USER = "git"; - - LANDING_PAGE = "explore"; - }; - service = { - DISABLE_REGISTRATION = true; - ENABLE_BASIC_AUTHENTICATION = false; - DISABLE_USERS_PAGE = true; - DISABLE_ORGANIZATIONS_PAGE = true; - }; - repository = { - # ENABLE_PUSH_CREATE_USER = true; - # ENABLE_PUSH_CREATE_ORG = true; - DISABLE_STARS = true; - DEFAULT_PRIVATE = "private"; - }; - admin = { - DISABLE_REGULAR_ORG_CREATION = true; - USER_DISABLED_FEATURES = "deletion"; - }; - other = { - SHOW_FOOTER_POWERED_BY = false; - SHOW_FOOTER_VERSION = false; - SHOW_FOOTER_TEMPLATE_LOAD_TIME = false; - }; - migrations = { - ALLOWED_DOMAINS = "*.github.com,github.com"; - ALLOW_LOCALNETWORKS = true; - }; - }; - }; - }; - }; -} diff --git a/common/_containers/obsidian_sync.md b/common/_containers/obsidian_sync.md deleted file mode 100644 index 98f7e11..0000000 --- a/common/_containers/obsidian_sync.md +++ /dev/null @@ -1,7 +0,0 @@ -docker run \ - -e hostname=https://obsidiansync.joshuabell.xyz \ - -e database=obsidian_sync \ - -e username=obsidian_admin \ - -e password=$REPLACE \ - docker.io/oleduc/docker-obsidian-livesync-couchdb:master \ - deno -A /scripts/generate_setupuri.ts diff --git a/common/_containers/obsidian_sync.nix b/common/_containers/obsidian_sync.nix deleted file mode 100644 index 42f8b52..0000000 --- a/common/_containers/obsidian_sync.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - config, - pkgs, - ... -}: -let - cfg = config.services.obsidian_sync; -in -{ - options.services.obsidian_sync = - let - lib = pkgs.lib; - in - { - port = lib.mkOption { - type = lib.types.port; - default = 5984; - description = "Port number for Obsidian Sync CouchDB server"; - }; - dataDir = lib.mkOption { - type = lib.types.path; - default = "/var/lib/obsidian_sync"; - description = "Directory to store Obsidian Sync data"; - }; - serverUrl = lib.mkOption { - type = lib.types.str; - description = "URL of the Obsidian Sync server"; - }; - dockerEnvFiles = lib.mkOption { - type = lib.types.listOf lib.types.path; - default = [ ]; - description = "List of environment files to be used by the Obsidian Sync container. When provided you must supply chouchdb user/password env files they will not be supplied by default."; - }; - }; - - config = { - virtualisation.oci-containers.containers = { - ############# - # obsidian_sync # - ############# - obsidian_sync = { - user = "root"; - image = "docker.io/oleduc/docker-obsidian-livesync-couchdb:master"; - ports = [ - "${toString cfg.port}:${toString cfg.port}" - ]; - environment = { - SERVER_URL = cfg.serverUrl; - COUCHDB_DATABASE = "obsidian_sync"; - COUCHDB_USER = pkgs.lib.mkIf (cfg.dockerEnvFiles == [ ]) "adminu"; - COUCHDB_PASSWORD = pkgs.lib.mkIf (cfg.dockerEnvFiles == [ ]) "Password123"; - }; - environmentFiles = cfg.dockerEnvFiles; - volumes = [ - "${cfg.dataDir}/data:/opt/couchdb/data" - "${cfg.dataDir}/config:/opt/couchdb/etc/local.d" - ]; - }; - }; - }; -} diff --git a/common/_home_manager/default.nix b/common/_home_manager/default.nix deleted file mode 100644 index de3d9b7..0000000 --- a/common/_home_manager/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - config, - lib, - hyprland, - hyprlandPkgs, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "homeManager" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - users = lib.mkOption { - type = lib.types.attrsOf lib.types.attrs; - default = { }; - description = "Home manager users to configure. Should match nix options of home-manager.users..*"; - }; - stateVersion = lib.mkOption { - type = lib.types.str; - default = "25.05"; - description = "Home manager state version"; - }; - }; - config = { - # Home manager options - security.polkit.enable = true; - home-manager.useUserPackages = true; - home-manager.useGlobalPkgs = true; - home-manager.backupFileExtension = "bak"; - - home-manager.extraSpecialArgs = { - inherit hyprland hyprlandPkgs; - }; - - home-manager.users = lib.mapAttrs' (name: userConfig: { - inherit name; - value = userConfig // { - home.stateVersion = cfg.stateVersion; - programs.home-manager.enable = true; - home.username = name; - home.homeDirectory = lib.mkForce (if name == "root" then "/root" else "/home/${name}"); - }; - }) cfg.users; - }; -} diff --git a/common/_home_manager/mods/foot.nix b/common/_home_manager/mods/foot.nix deleted file mode 100644 index 706ffec..0000000 --- a/common/_home_manager/mods/foot.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ config, lib, ... }: -{ - options.components.foot = { - font_size = lib.mkOption { - type = lib.types.float; - default = 12.0; - description = "Font size for Foot terminal"; - }; - alpha = lib.mkOption { - type = lib.types.float; - default = 0.94; - description = "Background opacity for Foot terminal (1.0 = opaque)"; - }; - }; - config = { - programs.foot = { - enable = true; - - # This renders to ~/.config/foot/foot.ini - settings = { - main = { - # Use the same font and size as your Kitty config - font = "JetBrainsMonoNL Nerd Font:size=${toString config.components.foot.font_size}"; - - # Initial window size in character cells (Kitty used 160c x 55c) - "initial-window-size-chars" = "160x55"; - }; - - colors = { - # Background opacity (1.0 = opaque) - alpha = toString config.components.foot.alpha; - - # Foreground/background - foreground = "e0e0e0"; - background = "262626"; - - # 16-color palette - # normal (0–7) - regular0 = "1f1f1f"; # black - regular1 = "f38ba8"; # red - regular2 = "a6e3a1"; # green - regular3 = "f9e2af"; # yellow - regular4 = "89b4fa"; # blue - regular5 = "cba6f7"; # magenta - regular6 = "89dceb"; # cyan - regular7 = "e0e0e0"; # white - - # bright (8–15) - bright0 = "565656"; # bright black - bright1 = "f38ba8"; # bright red - bright2 = "a6e3a1"; # bright green - bright3 = "f9e2af"; # bright yellow - bright4 = "89b4fa"; # bright blue - bright5 = "cba6f7"; # bright magenta - bright6 = "89dceb"; # bright cyan - bright7 = "ffffff"; # bright white - }; - }; - }; - }; -} diff --git a/common/_home_manager/mods/kitty.nix b/common/_home_manager/mods/kitty.nix deleted file mode 100644 index 1b58b46..0000000 --- a/common/_home_manager/mods/kitty.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ config, lib, ... }: -{ - options.components.kitty = { - font_size = lib.mkOption { - type = lib.types.float; - default = 12.0; - description = "Font size for Kitty terminal"; - }; - }; - config = { - # Enable Kitty terminal - programs.kitty = { - enable = true; - - settings = { - # Window settings - background_opacity = 1.0; - os_window_class = "kitty"; - remember_window_size = false; - placement_strategy = "center"; - initial_window_width = "160c"; - initial_window_height = "55c"; - - # Remove window borders - hide_window_decorations = "titlebar-only"; - tab_title_template = "none"; - active_tab_title_template = "none"; - draw_minimal_borders = "yes"; - window_border_width = "0.1pt"; - - # Colors (Catppuccin Coal) - foreground = "#e0e0e0"; - background = "#262626"; - color0 = "#1f1f1f"; - color1 = "#f38ba8"; - color2 = "#a6e3a1"; - color3 = "#f9e2af"; - color4 = "#89b4fa"; - color5 = "#cba6f7"; - color6 = "#89dceb"; - color7 = "#e0e0e0"; - color8 = "#565656"; - color9 = "#f38ba8"; - color10 = "#a6e3a1"; - color11 = "#f9e2af"; - color12 = "#89b4fa"; - color13 = "#cba6f7"; - color14 = "#89dceb"; - color15 = "#ffffff"; - - # Font settings - font_family = "JetBrainsMonoNL Nerd Font"; - font_size = config.components.kitty.font_size; - bold_font = "auto"; - italic_font = "auto"; - italic_bold_font = "auto"; - }; - - # If you want to include extra configuration this way instead of through the main `settings` attribute - extraConfig = '' - # You can add additional config here if needed - ''; - }; - }; -} diff --git a/common/_home_manager/mods/nix_deprecations.nix b/common/_home_manager/mods/nix_deprecations.nix deleted file mode 100644 index d281d87..0000000 --- a/common/_home_manager/mods/nix_deprecations.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ ... }: -{ - programs.zsh.shellAliases = { - # Nix deprecations - nix-hash = "echo 'The functionality of nix-hash may be covered by various subcommands or options in the new `nix` command.'"; - nix-build = "echo 'Use `nix build` instead.'"; - nix-info = "echo 'Use `nix flake info` or other `nix` subcommands to obtain system and Nix information.'"; - nix-channel = "echo 'Channels are being phased out in favor of flakes. Use `nix flake` subcommands.'"; - nix-instantiate = "echo 'Use `nix eval` or `nix-instantiate` with flakes.'"; - nix-collect-garbage = "echo 'Use `nix store gc` instead.'"; - nix-prefetch-url = "echo 'Use `nix-prefetch` or fetchers in Nix expressions.'"; - nix-copy-closure = "echo 'Use `nix copy` instead.'"; - nix-shell = "echo 'Use `nix shell` instead.'"; - # nix-daemon # No direct replacement: The Nix daemon is still in use and managed by the system service manager. - nix-store = "echo 'Use `nix store` subcommands for store operations.'"; - nix-env = "echo 'Use `nix profile` instead'"; - }; -} diff --git a/common/_home_manager/mods/obs.nix b/common/_home_manager/mods/obs.nix deleted file mode 100644 index 68d6d68..0000000 --- a/common/_home_manager/mods/obs.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ ... }: -{ - programs.obs-studio.enable = true; -} diff --git a/common/boot/default.nix b/common/boot/default.nix deleted file mode 100644 index 9561386..0000000 --- a/common/boot/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ config, lib, ... }: -let - ccfg = import ../config.nix; - cfg = config.${ccfg.custom_config_key}.boot; -in -{ - imports = [ - ./grub.nix - ./systemd.nix - ]; - config = { - assertions = [ - ( - let - enabledBootloaders = lib.filter (x: x.enabled) [ - { - name = "systemd"; - enabled = cfg.systemd.enable; - } - { - name = "grub"; - enabled = cfg.grub.enable; - } - ]; - in - { - assertion = lib.length enabledBootloaders <= 1; - message = - "Only one bootloader can be enabled at a time. Enabled: " - + lib.concatStringsSep ", " (map (x: x.name) enabledBootloaders); - } - ) - ]; - }; -} diff --git a/common/boot/grub.nix b/common/boot/grub.nix deleted file mode 100644 index c922d57..0000000 --- a/common/boot/grub.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "boot" - "grub" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "Grub bootloader"; - device = lib.mkOption { - type = lib.types.str; - default = "/dev/sda"; - description = '' - The device to install GRUB on. - ''; - }; - }; - - config = lib.mkIf cfg.enable { - boot.loader.grub = { - enable = true; - device = cfg.device; - }; - }; -} diff --git a/common/boot/systemd.nix b/common/boot/systemd.nix deleted file mode 100644 index 7021795..0000000 --- a/common/boot/systemd.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "boot" - "systemd" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "Systemd bootloader"; - }; - config = lib.mkIf cfg.enable { - boot.loader = { - systemd-boot = { - enable = true; - consoleMode = "keep"; - }; - timeout = 5; - efi = { - canTouchEfiVariables = true; - }; - }; - }; -} diff --git a/common/config.nix b/common/config.nix deleted file mode 100644 index 3292380..0000000 --- a/common/config.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - custom_config_key = "ringofstorms_common"; -} diff --git a/common/desktop_environment/cosmic/default.nix b/common/desktop_environment/cosmic/default.nix deleted file mode 100644 index 6a81d92..0000000 --- a/common/desktop_environment/cosmic/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../../config.nix; - cfg_path = [ ccfg.custom_config_key "desktopEnvironment" "cosmic" ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -with lib; -{ - options = {} - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "COSMIC desktop environment (System76)"; - terminalCommand = mkOption { - type = lib.types.str; - default = "foot"; - description = "The terminal command to use."; - }; - }; - - config = lib.mkIf cfg.enable { - services.greetd = { - enable = true; - vt = 2; - # settings.default_session = { - # command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --remember --remember-session --cmd '${pkgs.dbus}/bin/dbus-run-session ${pkgs.cosmic}/bin/cosmic-session'"; - # user = "greeter"; - # }; - }; - - # Caps Lock as Escape for console/tty - console.useXkbConfig = true; - services.xserver.xkb = { - layout = "us"; - options = "caps:escape"; - }; - - environment.systemPackages = with pkgs; [ - wl-clipboard - wofi - btop - ]; - - xdg.portal.enable = true; - - environment.sessionVariables = { - NIXOS_OZONE_WL = "1"; - GTK_THEME = "Adwaita:dark"; - }; - - qt = { enable = true; platformTheme = "gtk2"; style = "adwaita-dark"; }; - hardware.graphics.enable = true; - }; -} diff --git a/common/desktop_environment/default.nix b/common/desktop_environment/default.nix deleted file mode 100644 index 4004ada..0000000 --- a/common/desktop_environment/default.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ config, lib, ... }: -let - ccfg = import ../config.nix; - cfg = config.${ccfg.custom_config_key}.desktopEnvironment; -in -{ - imports = [ - ./gnome - ./hyprland - ./sway - ./cosmic - ]; - config = { - assertions = [ - ( - let - enabledDEs = lib.filter (x: x.enabled) [ - { - name = "gnome"; - enabled = cfg.gnome.enable; - } - { - name = "hyprland"; - enabled = cfg.hyprland.enable; - } - { - name = "sway"; - enabled = cfg.sway.enable; - } - { - name = "cosmic"; - enabled = cfg.cosmic.enable; - } - ]; - in - { - assertion = lib.length enabledDEs <= 1; - message = - "Only one desktop environment can be enabled at a time. Enabled: " - + lib.concatStringsSep ", " (map (x: x.name) enabledDEs); - } - ) - ]; - }; -} diff --git a/common/desktop_environment/gnome/black.png b/common/desktop_environment/gnome/black.png deleted file mode 100644 index b87512f..0000000 Binary files a/common/desktop_environment/gnome/black.png and /dev/null differ diff --git a/common/desktop_environment/gnome/dconf.nix b/common/desktop_environment/gnome/dconf.nix deleted file mode 100644 index 141baa7..0000000 --- a/common/desktop_environment/gnome/dconf.nix +++ /dev/null @@ -1,208 +0,0 @@ -{ cfg }: -{ - lib, - pkgs, - ... -}: -{ - config = lib.mkIf cfg.enable { - home-manager.sharedModules = [ - ( - { lib, ... }: - with lib.hm.gvariant; - { - # use `dconf dump /` before and after and diff the files for easy editing of dconf below - # dconf dump / > /tmp/dconf_dump_start && watch -n0.5 "dconf dump / > /tmp/dconf_dump_current && \diff --color /tmp/dconf_dump_start /tmp/dconf_dump_current -U12" - # To get nix specific diff: - # \diff -u /tmp/dconf_dump_start /tmp/dconf_dump_current | grep '^+[^+]' | sed 's/^+//' | dconf2nix - # OR (Must be logged into user directly, no SU to user will work): `dconf watch /` - # OR get the exact converted nixConfig from `dconf dump / | dconf2nix | less` and search with forward slash - dconf.settings = { - "org/gnome/shell" = { - favorite-apps = [ ]; - enabled-extensions = with pkgs.gnomeExtensions; [ - vertical-workspaces.extensionUuid - compact-top-bar.extensionUuid - tray-icons-reloaded.extensionUuid - vitals.extensionUuid - ] ++ lib.optionals cfg.enableRotate [ - screen-rotate.extensionUuid - ]; - }; - - # Plugin Settings - "org/gnome/shell/extensions/vertical-workspaces" = { - animation-speed-factor = 42; - center-dash-to-ws = false; - dash-bg-color = 0; - dash-position = 2; - dash-position-adjust = 0; - hot-corner-action = 0; - startup-state = 1; - ws-switcher-wraparound = true; - }; - "org/gnome/shell/extensions/compact-top-bar" = { - fade-text-on-fullscreen = true; - }; - "org/gnome/shell/extensions/vitals" = { - position-in-panel = 1; - }; - - # Built in settings - "org/gnome/desktop/session" = { - idle-delay = mkUint32 0; - }; - "org/gnome/desktop/wm/preferences" = { - resize-with-right-button = true; - button-layout = "maximize:appmenu,close"; - audible-bell = false; - wrap-around = true; - }; - "org/gnome/settings-daemon/plugins/media-keys" = { - # Disable the lock screen shortcut - screensaver = [ "" ]; - custom-keybindings = [ - "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" - "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/" - ]; - }; - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = { - binding = "Return"; - command = cfg.terminalCommand; - name = "Launch terminal"; - }; - "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = { - binding = "Space"; - command = "wofi"; - name = "Launcher"; - }; - "org/gnome/desktop/wm/keybindings" = { - minimize = [ "" ]; - move-to-workspace-1 = [ "" ]; - move-to-workspace-2 = [ "" ]; - move-to-workspace-3 = [ "" ]; - move-to-workspace-4 = [ "" ]; - move-to-workspace-last = [ "" ]; - move-to-workspace-down = [ "j" ]; - move-to-workspace-up = [ "k" ]; - # move-to-workspace-left = [ "h" ]; - # move-to-workspace-right = [ "l" ]; - switch-input-source = [ ]; - switch-input-source-backward = [ ]; - switch-to-workspace-1 = [ "1" ]; - switch-to-workspace-2 = [ "2" ]; - switch-to-workspace-3 = [ "3" ]; - switch-to-workspace-4 = [ "4" ]; - switch-to-workspace-last = [ "" ]; - switch-to-workspace-down = [ "j" ]; - switch-to-workspace-up = [ "k" ]; - # switch-to-workspace-left = [ "k" ]; - # switch-to-workspace-right = [ "j" ]; - # move-to-monitor-down = [ "j" ]; - # move-to-monitor-up = [ "k" ]; - move-to-monitor-left = [ "h" ]; - move-to-monitor-right = [ "l" ]; - unmaximize = [ "j" ]; - maximize = [ "k" ]; - }; - "org/gnome/mutter" = { - dynamic-workspaces = true; - edge-tiling = true; - workspaces-only-on-primary = true; - center-new-windows = true; - }; - "org/gnome/mutter/keybindings" = { - toggle-tiled-right = [ "l" ]; - toggle-tiled-left = [ "h" ]; - }; - "org/gnome/settings-daemon/plugins/power" = { - power-button-action = "nothing"; - sleep-inactive-ac-type = "nothing"; - sleep-inactive-battery-type = "nothing"; - idle-brightness = 15; - power-saver-profile-on-low-battery = false; - }; - "org/gnome/desktop/background" = { - color-shading-type = "solid"; - picture-options = "zoom"; - picture-uri = "file://" + (./black.png); - picture-uri-dark = "file://" + (./black.png); - primary-color = "#000000000000"; - secondary-color = "#000000000000"; - }; - "org/gnome/desktop/screensaver" = { - lock-enabled = false; - idle-activation-enabled = false; - picture-options = "zoom"; - picture-uri = "file://" + (./black.png); - picture-uri-dark = "file://" + (./black.png); - }; - "org/gnome/desktop/applications/terminal" = { - exec = "alacritty"; - }; - "org/gnome/settings-daemon/plugins/color" = { - night-light-enabled = false; - night-light-schedule-automatic = false; - }; - "org/gnome/shell/keybindings" = { - shift-overview-down = [ "" ]; - shift-overview-up = [ "" ]; - switch-to-application-1 = [ "" ]; - switch-to-application-2 = [ "" ]; - switch-to-application-3 = [ "" ]; - switch-to-application-4 = [ "" ]; - switch-to-application-5 = [ "" ]; - switch-to-application-6 = [ "" ]; - switch-to-application-7 = [ "" ]; - switch-to-application-8 = [ "" ]; - switch-to-application-9 = [ "" ]; - toggle-quick-settings = [ "" ]; - toggle-application-view = [ "" ]; - }; - "org/gtk/gtk4/settings/file-chooser" = { - show-hidden = true; - }; - - "org/gnome/desktop/interface" = { - accent-color = "orange"; - show-battery-percentage = true; - clock-show-date = true; - clock-show-seconds = true; - clock-show-weekday = true; - color-scheme = "prefer-dark"; - cursor-size = 24; - enable-animations = true; - enable-hot-corners = false; - font-antialiasing = "grayscale"; - font-hinting = "slight"; - gtk-theme = "Adwaita-dark"; - # icon-theme = "Yaru-magenta-dark"; - }; - - "org/gnome/desktop/notifications" = { - application-children = [ "org-gnome-tweaks" ]; - }; - - "org/gnome/desktop/notifications/application/org-gnome-tweaks" = { - application-id = "org.gnome.tweaks.desktop"; - }; - - "org/gnome/desktop/peripherals/mouse" = { - natural-scroll = false; - }; - - "org/gnome/desktop/peripherals/touchpad" = { - disable-while-typing = true; - two-finger-scrolling-enabled = true; - natural-scroll = true; - }; - - "org/gnome/tweaks" = { - show-extensions-notice = false; - }; - }; - } - ) - ]; - }; -} diff --git a/common/desktop_environment/gnome/default.nix b/common/desktop_environment/gnome/default.nix deleted file mode 100644 index 9f36b57..0000000 --- a/common/desktop_environment/gnome/default.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "gnome" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -with lib; -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "gnome desktop environment"; - terminalCommand = mkOption { - type = lib.types.str; - default = "kitty"; - description = "The terminal command to use."; - }; - enableRotate = lib.mkEnableOption "enable screen rotation"; - }; - - imports = [ - (import ./dconf.nix { inherit cfg; }) - (import ./wofi.nix { inherit cfg; }) - ]; - - config = lib.mkIf cfg.enable { - services.xserver = { - enable = true; - desktopManager.gnome.enable = true; - displayManager.gdm = { - enable = true; - autoSuspend = false; - wayland = true; - }; - }; - services.gnome.gnome-initial-setup.enable = false; - - environment.gnome.excludePackages = with pkgs; [ - gnome-backgrounds - gnome-video-effects - gnome-maps - gnome-music - gnome-tour - gnome-text-editor - gnome-user-docs - ]; - environment.systemPackages = with pkgs; [ - dconf-editor - dconf2nix - gnome-tweaks - wayland - wayland-utils - wl-clipboard - numix-cursor-theme - gnomeExtensions.vertical-workspaces - gnomeExtensions.compact-top-bar - gnomeExtensions.tray-icons-reloaded - gnomeExtensions.vitals - ] ++ lib.optionals cfg.enableRotate [ - gnomeExtensions.screen-rotate - ]; - environment.sessionVariables = { - NIXOS_OZONE_WL = "1"; - GTK_THEME = "Adwaita:dark"; - }; - - qt = { - enable = true; - platformTheme = "gnome"; - style = "adwaita-dark"; - }; - - hardware.graphics = { - enable = true; - }; - }; -} diff --git a/common/desktop_environment/gnome/wofi.css b/common/desktop_environment/gnome/wofi.css deleted file mode 100644 index 976c0ef..0000000 --- a/common/desktop_environment/gnome/wofi.css +++ /dev/null @@ -1,51 +0,0 @@ -window { - margin: 0px; - border: 1px solid #171717; - background-color: #262626; -} - -#input { - margin: 5px; - border: none; - color: #e0e0e0; - background-color: #1f1f1f; -} - -#inner-box { - margin: 5px; - border: none; - background-color: #171717; -} - -#outer-box { - margin: 5px; - border: none; - background-color: #191919; -} - -#scroll { - margin: 0px; - border: none; -} - -#text { - margin: 5px; - border: none; - color: #e0e0e0; -} - -#entry.activatable #text { - color: #cccccc; -} - -#entry>* { - color: #e0e0e0; -} - -#entry:selected { - background-color: #4f4f4f; -} - -#entry:selected #text { - font-weight: bold; -} diff --git a/common/desktop_environment/gnome/wofi.nix b/common/desktop_environment/gnome/wofi.nix deleted file mode 100644 index d3cd8e2..0000000 --- a/common/desktop_environment/gnome/wofi.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ cfg }: -{ lib, ... }: -{ - config = lib.mkIf cfg.enable { - home-manager.sharedModules = [ - ( - { lib, ... }: - { - programs.wofi = { - enable = true; - settings = { - width = "28%"; - height = "38%"; - show = "drun"; - location = "center"; - gtk_dark = true; - valign = "center"; - key_backward = "Ctrl+k"; - key_forward = "Ctrl+j"; - insensitive = true; - prompt = "Run"; - allow_images = true; - }; - style = builtins.readFile ./wofi.css; - }; - } - ) - ]; - - }; -} diff --git a/common/desktop_environment/hyprland/default.nix b/common/desktop_environment/hyprland/default.nix deleted file mode 100644 index 8b96a31..0000000 --- a/common/desktop_environment/hyprland/default.nix +++ /dev/null @@ -1,170 +0,0 @@ -{ - config, - lib, - pkgs, - hyprland, - hyprlandPkgs, - ... -}: -let - ccfg = import ../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "hyprland" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -with lib; -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "hyprland desktop environment"; - terminalCommand = mkOption { - type = lib.types.str; - default = "foot"; - description = "The terminal command to use."; - }; - extraOptions = mkOption { - type = lib.types.attrs; - default = { }; - description = "Extra options for Hyprland configuration."; - }; - hyprpaperSettings = lib.mkOption { - type = lib.types.attrs; - default = { }; - description = "Extra options for hyprpaper configuration."; - }; - swaync = { - enable = lib.mkEnableOption "Enable Swaync (notification center for Hyprland)"; - }; - waybar = { - enable = lib.mkEnableOption "Enable Waybar (status bar for Hyprland)"; - }; - }; - - config = lib.mkIf cfg.enable { - # Enable for all users - home-manager = { - sharedModules = [ - hyprland.homeManagerModules.default - ./home_manager - ]; - }; - - services.greetd = { - enable = true; - vt = 2; - settings = { - default_session = { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --remember --remember-session --cmd '${pkgs.dbus}/bin/dbus-run-session ${hyprlandPkgs.hyprland}/bin/Hyprland'"; - user = "greeter"; - }; - }; - }; - - # Caps Lock as Escape for console/tty - console.useXkbConfig = true; - services.xserver.xkb = { - layout = "us"; - options = "caps:escape"; - }; - - environment.systemPackages = with pkgs; [ - wl-clipboard - wl-clip-persist - wofi # application launcher - nemo # file manager (x11) - # nautilus # file manager - feh # image viewer (x11) - # imv # image viewer - networkmanager # network management - upower # power management - brightnessctl # screen/keyboard brightness control - wireplumber # media session manager - libgtop # system monitor library - bluez # Bluetooth support - power-profiles-daemon # power profiles - grim - slurp - hyprpicker - grimblast # screenshot tool - wf-recorder # screen recording tool - btop # system monitor - ]; - - services.blueman.enable = config.hardware.bluetooth.enable; - - programs.hyprland = { - enable = true; - # xwayland.enable = false; - # withUWSM = true; - - # set the flake package - package = hyprlandPkgs.hyprland; - # make sure to also set the portal package, so that they are in sync - # This is set below now in xdf portal directly so we can also add things like gtk - # portalPackage = hyprlandPkgs.xdg-desktop-portal-hyprland; - }; - - xdg.portal = { - enable = true; - extraPortals = lib.mkForce [ - hyprlandPkgs.xdg-desktop-portal-hyprland - # hyprlandPkgs.xdg-desktop-portal-wlr - hyprlandPkgs.xdg-desktop-portal-gtk - ]; - config.common.default = [ - "hyprland" - # "wlr" - "gtk" - ]; - }; - - # Enable PipeWire + WirePlumber so xdg-desktop-portal can do screencast - services.pipewire = { - enable = true; - # Enable WirePlumber session manager via the pipewire module option - wireplumber = { - enable = true; - }; - }; - - hardware.graphics = { - enable = true; - package = hyprlandPkgs.mesa; - # if you also want 32-bit support (e.g for Steam) - # enable32Bit = true; - package32 = hyprlandPkgs.pkgsi686Linux.mesa; - }; - - # Environment variables - environment.sessionVariables = { - GTK_THEME = "Adwaita:dark"; - XDG_SESSION_TYPE = "wayland"; - # XDG_CURRENT_DESKTOP = "sway"; - # XDG_SESSION_DESKTOP = "sway"; - # prefer EGL renderer (can be changed back to "auto" if needed) - WLR_RENDERER = "egl"; - - # Tell apps to run native wayland - NIXOS_OZONE_WL = "1"; - ELECTRON_OZONE_PLATFORM_HINT = "wayland"; - ELECTRON_ENABLE_WAYLAND = "1"; - ELECTRON_DISABLE_SANDBOX = "0"; - GDK_BACKEND = "wayland,x11"; # GTK - QT_QPA_PLATFORM = "wayland;xcb"; # Qt 5/6 - MOZ_ENABLE_WAYLAND = "1"; # Firefox - SDL_VIDEODRIVER = "wayland"; # SDL apps/games - CLUTTER_BACKEND = "wayland"; - }; - - # Qt theming - qt = { - enable = true; - platformTheme = "gtk2"; - style = "adwaita-dark"; - }; - }; -} diff --git a/common/desktop_environment/hyprland/home_manager/hyprpaper.nix b/common/desktop_environment/hyprland/home_manager/hyprpaper.nix deleted file mode 100644 index 06d6820..0000000 --- a/common/desktop_environment/hyprland/home_manager/hyprpaper.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - osConfig, - lib, - ... -}: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "hyprland" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - config = { - services.hyprpaper = { - enable = true; - settings = cfg.hyprpaperSettings; - }; - }; -} diff --git a/common/desktop_environment/hyprland/home_manager/swaync.nix b/common/desktop_environment/hyprland/home_manager/swaync.nix deleted file mode 100644 index b26fa58..0000000 --- a/common/desktop_environment/hyprland/home_manager/swaync.nix +++ /dev/null @@ -1,251 +0,0 @@ -{ - lib, - osConfig, - ... -}: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "hyprland" - "swaync" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - config = lib.mkIf cfg.enable { - services.swaync = { - enable = true; - settings = { - ignore = [ - "com.spotify.Client" - ]; - - positionX = "right"; - positionY = "top"; - layer = "overlay"; - control-center-layer = "top"; - layer-shell = true; - cssPriority = "application"; - - control-center-margin-top = 0; - control-center-margin-bottom = 0; - control-center-margin-right = 0; - control-center-margin-left = 0; - - notification-2fa-action = true; - notification-inline-replies = false; - notification-icon-size = 64; - notification-body-image-height = 100; - notification-body-image-width = 200; - - timeout = 10; - timeout-low = 5; - timeout-critical = 0; - - control-center-width = 500; - control-center-height = 600; - notification-window-width = 500; - - keyboard-shortcuts = true; - image-visibility = "when-available"; - transition-time = 200; - hide-on-clear = false; - hide-on-action = true; - script-fail-notify = true; - - widgets = [ - "inhibitors" - "title" - "dnd" - "volume" - "backlight" - "mpris" - "buttons-grid#quick" - "notifications" - ]; - - # Widget configurations - widget-config = { - inhibitors = { - text = "Inhibitors"; - button-text = "Clear All"; - clear-all-button = true; - }; - title = { - text = "Notifications"; - clear-all-button = true; - button-text = "Clear All"; - }; - dnd.text = "Do Not Disturb"; - mpris = { - image-size = 96; - image-radius = 12; - }; - volume = { - label = "󰕾"; - show-per-app = true; - }; - backlight = { - label = "󰃟"; - device = "intel_backlight"; - }; - "buttons-grid#quick" = { - columns = 4; # adjust: 3/4/5 - icon-size = 20; # tweak to taste - actions = [ - # Power - { - label = "󰐥"; - tooltip = "Shutdown"; - command = "confirm-action 'systemctl poweroff' 'Shutdown?'"; - } - { - label = "󰜉"; - tooltip = "Reboot"; - command = "confirm-action 'systemctl reboot' 'Reboot?'"; - } - { - label = "󰍃"; - tooltip = "Logout"; - command = "confirm-action 'hyprctl dispatch exit' 'Logout?'"; - } - ]; - }; - }; - }; - - # Custom CSS for the control center - style = '' - .control-center { - background: #1a1b26; - border: 2px solid #7dcae4; - border-radius: 12px; - } - - .control-center-list { - background: transparent; - } - - .control-center .notification-row:focus, - .control-center .notification-row:hover { - opacity: 1; - background: #24283b; - } - - .notification { - border-radius: 8px; - margin: 6px 12px; - box-shadow: 0 0 0 1px rgba(125, 196, 228, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3); - padding: 0; - } - - /* Widget styling */ - .widget-title { - margin: 8px; - font-size: 1.5rem; - color: #c0caf5; - } - - .widget-dnd { - margin: 8px; - font-size: 1.1rem; - color: #c0caf5; - } - - .widget-dnd > switch { - font-size: initial; - border-radius: 8px; - background: #414868; - border: 1px solid #7dcae4; - } - - .widget-dnd > switch:checked { - background: #7dcae4; - } - - .widget-mpris { - color: #c0caf5; - background: #24283b; - padding: 8px; - margin: 8px; - border-radius: 8px; - } - - .widget-mpris-player { - padding: 8px; - margin: 8px; - } - - .widget-mpris-title { - font-weight: bold; - font-size: 1.25rem; - } - - .widget-mpris-subtitle { - font-size: 1.1rem; - color: #9ece6a; - } - - .widget-volume { - background: #24283b; - padding: 8px; - margin: 8px; - border-radius: 8px; - color: #c0caf5; - } - - .widget-backlight { - background: #24283b; - padding: 8px; - margin: 8px; - border-radius: 8px; - color: #c0caf5; - } - - .widget-menubar { - background: #24283b; - padding: 8px; - margin: 8px; - border-radius: 8px; - color: #c0caf5; - } - - .widget-menubar .menu-item button { - background: #1f2335; - color: #c0caf5; - border-radius: 8px; - padding: 6px 10px; - margin: 4px; - border: 1px solid #2e3440; - font-family: "JetBrainsMonoNL Nerd Font"; - } - - .widget-menubar .menu-item button:hover { - background: #414868; - border-color: #7dcae4; - } - - .topbar-buttons button { - border: none; - background: transparent; - color: #c0caf5; - font-size: 1.1rem; - border-radius: 8px; - margin: 0 4px; - padding: 8px; - } - - .topbar-buttons button:hover { - background: #414868; - } - - .topbar-buttons button:active { - background: #7dcae4; - color: #1a1b26; - } - ''; - }; - }; -} diff --git a/common/desktop_environment/hyprland/home_manager/template.nix b/common/desktop_environment/hyprland/home_manager/template.nix deleted file mode 100644 index 905d5e4..0000000 --- a/common/desktop_environment/hyprland/home_manager/template.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - osConfig, - lib, - pkgs, - ... -}: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "hyprland" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - -} diff --git a/common/desktop_environment/hyprland/home_manager/waybar.nix b/common/desktop_environment/hyprland/home_manager/waybar.nix deleted file mode 100644 index 66f3349..0000000 --- a/common/desktop_environment/hyprland/home_manager/waybar.nix +++ /dev/null @@ -1,258 +0,0 @@ -{ lib, osConfig, ... }: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "hyprland" - "waybar" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - config = lib.mkIf cfg.enable { - - programs.waybar = { - enable = true; - systemd.enable = true; - settings = { - mainBar = { - layer = "top"; - position = "top"; - height = 28; - spacing = 6; - margin-top = 0; - margin-bottom = 0; - margin-left = 10; - margin-right = 10; - - modules-left = [ - "hyprland/workspaces" - ]; - modules-center = [ - "clock" - "temperature" - "cpu" - "memory" - "disk" - ]; - modules-right = [ - "battery" - "battery#bat2" - "pulseaudio" - "network" - "bluetooth" - "power-profiles-daemon" - "backlight" - "custom/notifications" - "tray" - "custom/power" - ]; - - "hyprland/workspaces" = { - format = "{icon}"; - format-icons = { - "1" = "一"; - "2" = "二"; - "3" = "三"; - "4" = "四"; - "5" = "五"; - "6" = "六"; - "7" = "七"; - "8" = "八"; - "9" = "九"; - "10" = "十"; - "11" = "十一"; - "12" = "十二"; - "13" = "十三"; - "14" = "十四"; - "15" = "十五"; - "16" = "十六"; - "17" = "十七"; - "18" = "十八"; - "19" = "十九"; - "20" = "二十"; - }; - disable-scroll = false; - }; - - # CENTER - clock = { - format = "{:%b %d, %H:%M}"; - tooltip-format = "{:%Y %B}\n{calendar}"; - }; - - temperature = { - thermal-zone = 2; - hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; - critical-threshold = 80; - format-critical = "󰔏 {temperatureC}°C"; - format = "󰔏 {temperatureC}°C"; - }; - - cpu = { - format = "󰻠 {usage}%"; - tooltip = true; - on-click = "btop"; - }; - - memory = { - format = "󰍛 {}%"; - on-click = "btop"; - }; - - disk = { - interval = 30; - format = "󰋊 {percentage_used}%"; - path = "/"; - on-click = "btop"; - }; - - # RIGHT - "battery" = { - "states" = { - # "good"= 95; - "warning" = 30; - "critical" = 15; - }; - "format" = "{capacity}% {icon}"; - "format-full" = "{capacity}% {icon}"; - "format-charging" = "{capacity}% "; - "format-plugged" = "{capacity}% "; - "format-alt" = "{time} {icon}"; - # "format-good"= ""; // An empty format will hide the module - # "format-full"= ""; - "format-icons" = [ - "" - "" - "" - "" - "" - ]; - }; - "battery#bat2" = { - "bat" = "BAT2"; - }; - - pulseaudio = { - format = "{icon} {volume}%"; - format-bluetooth = "󰂰 {volume}%"; - format-bluetooth-muted = "󰂲 "; - format-muted = "󰖁 "; - format-source = "󰍬 {volume}%"; - format-source-muted = "󰍭 "; - format-icons = { - headphone = "󰋋"; - hands-free = "󰂑"; - headset = "󰂑"; - phone = "󰏲"; - portable = "󰦧"; - car = "󰄋"; - default = [ - "󰕿" - "󰖀" - "󰕾" - ]; - }; - scroll-step = 5; - on-click = "pavucontrol"; - on-click-right = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - }; - - network = { - format-wifi = "󰤨 {essid} ({signalStrength}%)"; - format-ethernet = "󰈀 {ipaddr}/{cidr}"; - tooltip-format = "{ifname} via {gwaddr} "; - format-linked = "󰈀 {ifname} (No IP)"; - format-disconnected = "󰖪 Disconnected"; - # on-click = "wofi-wifi-menu"; - # on-click-right = "nmcli radio wifi toggle"; - }; - - bluetooth = { - format = "󰂯 {status}"; - format-connected = "󰂱 {device_alias}"; - format-connected-battery = "󰂱 {device_alias} {device_battery_percentage}%"; - tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected"; - tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}"; - tooltip-format-enumerate-connected = "{device_alias}\t{device_address}"; - tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_address}\t{device_battery_percentage}%"; - # on-click = "wofi-bluetooth-menu"; - # on-click-right = "bluetoothctl power toggle"; - }; - - "power-profiles-daemon" = { - format = "{icon}"; - "tooltip-format" = "Power profile: {profile}\nDriver: {driver}"; - tooltip = true; - "format-icons" = { - default = ""; - performance = ""; - balanced = ""; - "power-saver" = ""; - }; - }; - - backlight = { - format = "{percent}% {icon}"; - "format-icons" = [ - "" - "" - "" - "" - "" - "" - "" - "" - "" - ]; - }; - - "custom/notifications" = { - format = "{icon} {}"; - format-icons = { - notification = ""; - none = ""; - dnd-notification = "󰂛"; - dnd-none = "󰂛"; - inhibited-notification = ""; - inhibited-none = ""; - dnd-inhibited-notification = "󰂛"; - dnd-inhibited-none = "󰂛"; - }; - return-type = "json"; - exec-if = "which swaync-client"; - exec = "swaync-client -swb"; - on-click = "swaync-client -t -sw"; - on-click-right = "swaync-client -d -sw"; - escape = true; - tooltip = false; - }; - - "sway/language" = { - format = "{}"; - }; - - "tray" = { - "spacing" = 10; - }; - - "custom/power" = { - format = "⏻ "; - tooltip = false; - menu = "on-click"; - "menu-file" = ./waybar/power_menu.xml; - "menu-actions" = { - shutdown = "shutdown 0"; - reboot = "reboot"; - logout = "loginctl terminate-session $(loginctl list-sessions | grep seat0 | awk '{print $1}')"; - }; - }; - - }; - }; - - style = builtins.readFile ./waybar/waybar.css; - }; - }; -} diff --git a/common/desktop_environment/sway/default.nix b/common/desktop_environment/sway/default.nix deleted file mode 100644 index 71a46c1..0000000 --- a/common/desktop_environment/sway/default.nix +++ /dev/null @@ -1,158 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "sway" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -with lib; -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "sway (Wayland i3) desktop environment"; - terminalCommand = mkOption { - type = lib.types.str; - default = "foot"; - description = "The terminal command to use."; - }; - extraOptions = mkOption { - type = lib.types.attrs; - default = { }; - description = "Extra options for Sway configuration."; - }; - swaync = { - enable = lib.mkEnableOption "Enable Sway Notification Center"; - }; - waybar = { - enable = lib.mkEnableOption "Enable Waybar (status bar for Sway)"; - }; - }; - - config = lib.mkIf cfg.enable { - # Enable for all users via Home Manager fragments in this module - home-manager = { - sharedModules = [ ./home_manager ]; - }; - - services.greetd = { - enable = true; - vt = 2; - settings = { - default_session = { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --remember --remember-session --cmd '${pkgs.dbus}/bin/dbus-run-session ${pkgs.sway}/bin/sway'"; - user = "greeter"; - }; - }; - }; - - # Caps Lock as Escape for console/tty and Wayland - console.useXkbConfig = true; - services.xserver.xkb = { - layout = "us"; - options = "caps:escape"; - }; - - # Core packages and tools - environment.systemPackages = with pkgs; [ - wl-clipboard - wl-clip-persist - wofi # application launcher - nemo # file manager (x11) - feh # image viewer (x11) - networkmanager - upower - brightnessctl - wireplumber - libgtop - bluez - power-profiles-daemon - grim - slurp - wf-recorder - btop - pavucontrol - ]; - - services.blueman.enable = config.hardware.bluetooth.enable; - - programs.sway = { - enable = true; - wrapperFeatures.gtk = true; # include GTK integration env - extraPackages = with pkgs; [ - xwayland # allow legacy X11 apps - ]; - }; - - xdg.portal = { - enable = true; - extraPortals = lib.mkForce [ - pkgs.xdg-desktop-portal-wlr - pkgs.xdg-desktop-portal-gtk - ]; - config.common.default = [ - "wlr" - "gtk" - ]; - }; - - # Enable PipeWire + WirePlumber so xdg-desktop-portal can do screencast - services.pipewire = { - enable = true; - # Enable WirePlumber session manager via the pipewire module option - wireplumber = { - enable = true; - }; - }; - - # Ensure graphics/OpenGL are enabled so Sway uses GPU-backed rendering - hardware.graphics = { - enable = true; - # Keep defaults; Sway runs fine with mesa in system - }; - - hardware.opengl = { - enable = true; - # extraPackages can be used to force vendor-specific mesa/drivers if needed - extraPackages = with pkgs; []; - }; - - # Environment variables - environment.sessionVariables = lib.mkMerge [ - { - GTK_THEME = "Adwaita:dark"; - XDG_SESSION_TYPE = "wayland"; - XDG_CURRENT_DESKTOP = "sway"; - XDG_SESSION_DESKTOP = "sway"; - # prefer EGL renderer (can be changed back to "auto" if needed) - WLR_RENDERER = "egl"; - - # Tell apps to run native wayland - NIXOS_OZONE_WL = "1"; - ELECTRON_OZONE_PLATFORM_HINT = "wayland"; - ELECTRON_ENABLE_WAYLAND = "1"; - ELECTRON_DISABLE_SANDBOX = "0"; - GDK_BACKEND = "wayland,x11"; # GTK - QT_QPA_PLATFORM = "wayland;xcb"; # Qt 5/6 - MOZ_ENABLE_WAYLAND = "1"; # Firefox - SDL_VIDEODRIVER = "wayland"; # SDL apps/games - CLUTTER_BACKEND = "wayland"; - } - ]; - - # Qt theming - qt = { - enable = true; - platformTheme = "gtk2"; - style = "adwaita-dark"; - }; - }; -} diff --git a/common/desktop_environment/sway/home_manager/sway.nix b/common/desktop_environment/sway/home_manager/sway.nix deleted file mode 100644 index d14f573..0000000 --- a/common/desktop_environment/sway/home_manager/sway.nix +++ /dev/null @@ -1,190 +0,0 @@ -{ - config, - osConfig, - lib, - ... -}: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "sway" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - wayland.windowManager.sway = { - enable = true; - xwayland = true; - - config = lib.mkMerge [ - rec { - modifier = "Mod4"; # SUPER - terminal = cfg.terminalCommand; - menu = "wofi --show drun"; - - # Per-output workspace mapping (user can extend via extraOptions) - # Example (left as defaults): users can add `output HDMI-A-1 workspace 1,3,5` in extraOptions - - input = { - "type:keyboard" = { - xkb_layout = "us"; - xkb_options = "caps:escape"; - }; - "type:touchpad" = { - natural_scroll = "enabled"; - tap = "enabled"; - dwt = "enabled"; - }; - # Disable focus follows mouse to avoid accidental focus changes - # In Sway this behavior is controlled by focus_follows_mouse - }; - - focus = { - followMouse = "no"; - # onWindowActivation = "urgent"; # don't steal focus; mark urgent instead - }; - - gaps = { - inner = 2; - outer = 5; - smartGaps = false; - smartBorders = "on"; - }; - - colors = { - focused = { - background = "#444444"; - border = "#555555"; - childBorder = "#444444"; - indicator = "#595959"; - text = "#f1f1f1"; - }; - unfocused = { - background = "#222222"; - border = "#333333"; - childBorder = "#222222"; - indicator = "#292d2e"; - text = "#888888"; - }; - }; - - window = { - border = 1; - titlebar = false; - commands = [ - # Bitwarden chrome popup as floating example from Hyprland rules - { - criteria = { - app_id = "chrome-nngceckbapebfimnlniiiahkandclblb-Default"; - }; - command = "floating enable"; - } - { - criteria = { - app_id = "pavucontrol"; - }; - command = "floating enable, move position center, resize set 620 1200"; - } - { - criteria = { - class = "Google-chrome"; - window_role = "pop-up"; - }; - command = "floating enable, move position center, resize set 720 480"; - } - { - criteria = { - window_role = "pop-up"; - }; - command = "floating enable, move position center, resize set 640 420"; - } - { - criteria = { - window_role = "About"; - }; - command = "floating enable, move position center, resize set 640 420"; - } - ]; - }; - - # Keybindings mirroring Hyprland - keybindings = { - # Apps - "${modifier}+return" = "exec ${cfg.terminalCommand}"; - "${modifier}+space" = "exec pkill wofi || wofi --show drun"; - "${modifier}+q" = "kill"; - "${modifier}+shift+Escape" = "exit"; - "${modifier}+shift+q" = "exec swaylock"; - "${modifier}+f" = "floating toggle"; - - # Focus - "${modifier}+h" = "focus left"; - "${modifier}+l" = "focus right"; - "${modifier}+k" = "focus up"; - "${modifier}+j" = "focus down"; - - # Workspaces (numbers and vim-like mirror) - "${modifier}+1" = "workspace number 1"; - "${modifier}+n" = "workspace number 1"; - "${modifier}+2" = "workspace number 2"; - "${modifier}+m" = "workspace number 2"; - "${modifier}+3" = "workspace number 3"; - "${modifier}+comma" = "workspace number 3"; - "${modifier}+4" = "workspace number 4"; - "${modifier}+period" = "workspace number 4"; - "${modifier}+5" = "workspace number 5"; - "${modifier}+slash" = "workspace number 5"; - "${modifier}+6" = "workspace number 6"; - "${modifier}+7" = "workspace number 7"; - "${modifier}+8" = "workspace number 8"; - "${modifier}+9" = "workspace number 9"; - "${modifier}+0" = "workspace number 10"; - - # Move windows - "${modifier}+shift+h" = "move left"; - "${modifier}+shift+l" = "move right"; - "${modifier}+shift+k" = "move up"; - "${modifier}+shift+j" = "move down"; - "${modifier}+shift+1" = "move container to workspace number 1"; - "${modifier}+shift+n" = "move container to workspace number 1"; - "${modifier}+shift+2" = "move container to workspace number 2"; - "${modifier}+shift+m" = "move container to workspace number 2"; - "${modifier}+shift+3" = "move container to workspace number 3"; - "${modifier}+shift+comma" = "move container to workspace number 3"; - "${modifier}+shift+4" = "move container to workspace number 4"; - "${modifier}+shift+period" = "move container to workspace number 4"; - "${modifier}+shift+5" = "move container to workspace number 5"; - "${modifier}+shift+slash" = "move container to workspace number 5"; - "${modifier}+shift+6" = "move container to workspace number 6"; - "${modifier}+shift+7" = "move container to workspace number 7"; - "${modifier}+shift+8" = "move container to workspace number 8"; - "${modifier}+shift+9" = "move container to workspace number 9"; - "${modifier}+shift+0" = "move container to workspace number 10"; - - "${modifier}+left" = "resize shrink width 10 px or 10 ppt"; - "${modifier}+down" = "resize shrink height 10 px or 10 ppt"; - "${modifier}+up" = "resize grow height 10 px or 10 ppt"; - "${modifier}+right" = "resize grow width 10 px or 10 ppt"; - - # Mouse bindings (Mod + drag) - "${modifier}+button1" = "move"; - "${modifier}+button3" = "resize"; - - # Screenshot - "Print" = "exec grim -g \"$(slurp)\" - | wl-copy"; - }; - - bars = [ ]; # Use Waybar via Home Manager - startup = [ - { - command = "exec sh -c 'sleep 0.01; swaymsg workspace number 7 ; sleep 0.01; swaymsg workspace number 1'"; - } - { command = "pgrep waybar >/dev/null || waybar"; } - ]; - } - cfg.extraOptions - ]; - }; -} diff --git a/common/desktop_environment/sway/home_manager/swaync.nix b/common/desktop_environment/sway/home_manager/swaync.nix deleted file mode 100644 index 7fb0c8c..0000000 --- a/common/desktop_environment/sway/home_manager/swaync.nix +++ /dev/null @@ -1,112 +0,0 @@ -{ lib, osConfig, ... }: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "sway" - "swaync" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - config = lib.mkIf cfg.enable { - services.swaync = { - enable = true; - settings = { - ignore = [ "com.spotify.Client" ]; - positionX = "right"; - positionY = "top"; - layer = "overlay"; - control-center-layer = "top"; - layer-shell = true; - cssPriority = "application"; - control-center-margin-top = 0; - control-center-margin-bottom = 0; - control-center-margin-right = 0; - control-center-margin-left = 0; - notification-2fa-action = true; - notification-inline-replies = false; - notification-icon-size = 64; - notification-body-image-height = 100; - notification-body-image-width = 200; - timeout = 10; - timeout-low = 5; - timeout-critical = 0; - control-center-width = 500; - control-center-height = 600; - notification-window-width = 500; - keyboard-shortcuts = true; - image-visibility = "when-available"; - transition-time = 200; - hide-on-clear = false; - hide-on-action = true; - script-fail-notify = true; - widgets = [ - "inhibitors" - "title" - "dnd" - "volume" - "backlight" - "mpris" - "buttons-grid#quick" - "notifications" - ]; - widget-config = { - inhibitors = { - text = "Inhibitors"; - button-text = "Clear All"; - clear-all-button = true; - }; - title = { - text = "Notifications"; - clear-all-button = true; - button-text = "Clear All"; - }; - dnd.text = "Do Not Disturb"; - mpris = { - image-size = 96; - image-radius = 12; - }; - volume = { - label = "󰕾"; - show-per-app = true; - }; - backlight = { - label = "󰃟"; - device = "intel_backlight"; - }; - # "buttons-grid#quick" = { - # columns = 4; - # icon-size = 20; - # actions = [ - # { label = "󰐥"; tooltip = "Shutdown"; command = "confirm-action 'systemctl poweroff' 'Shutdown?'"; } - # { label = "󰜉"; tooltip = "Reboot"; command = "confirm-action 'systemctl reboot' 'Reboot?'"; } - # { label = "󰍃"; tooltip = "Logout"; command = "confirm-action 'swaymsg exit' 'Logout?'"; } - # ]; - # }; - }; - }; - style = '' - .control-center { background: #1a1b26; border: 2px solid #7dcae4; border-radius: 12px; } - .control-center-list { background: transparent; } - .control-center .notification-row:focus, .control-center .notification-row:hover { opacity: 1; background: #24283b; } - .notification { border-radius: 8px; margin: 6px 12px; box-shadow: 0 0 0 1px rgba(125,196,228,.3), 0 1px 3px 1px rgba(0,0,0,.7), 0 2px 6px 2px rgba(0,0,0,.3); padding: 0; } - .widget-title { margin: 8px; font-size: 1.5rem; color: #c0caf5; } - .widget-dnd { margin: 8px; font-size: 1.1rem; color: #c0caf5; } - .widget-dnd > switch { font-size: initial; border-radius: 8px; background: #414868; border: 1px solid #7dcae4; } - .widget-dnd > switch:checked { background: #7dcae4; } - .widget-mpris { color: #c0caf5; background: #24283b; padding: 8px; margin: 8px; border-radius: 8px; } - .widget-mpris-player { padding: 8px; margin: 8px; } - .widget-mpris-title { font-weight: bold; font-size: 1.25rem; } - .widget-mpris-subtitle { font-size: 1.1rem; color: #9ece6a; } - .widget-volume, .widget-backlight, .widget-menubar { background: #24283b; padding: 8px; margin: 8px; border-radius: 8px; color: #c0caf5; } - .widget-menubar .menu-item button { background: #1f2335; color: #c0caf5; border-radius: 8px; padding: 6px 10px; margin: 4px; border: 1px solid #2e3440; font-family: "JetBrainsMonoNL Nerd Font"; } - .widget-menubar .menu-item button:hover { background: #414868; border-color: #7dcae4; } - .topbar-buttons button { border: none; background: transparent; color: #c0caf5; font-size: 1.1rem; border-radius: 8px; margin: 0 4px; padding: 8px; } - .topbar-buttons button:hover { background: #414868; } - .topbar-buttons button:active { background: #7dcae4; color: #1a1b26; } - ''; - }; - }; -} diff --git a/common/desktop_environment/sway/home_manager/waybar.nix b/common/desktop_environment/sway/home_manager/waybar.nix deleted file mode 100644 index 3fc38be..0000000 --- a/common/desktop_environment/sway/home_manager/waybar.nix +++ /dev/null @@ -1,259 +0,0 @@ -{ lib, osConfig, ... }: -let - ccfg = import ../../../config.nix; - cfg_path = [ - ccfg.custom_config_key - "desktopEnvironment" - "sway" - "waybar" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path osConfig; -in -{ - config = lib.mkIf cfg.enable { - - programs.waybar = { - enable = true; - systemd.enable = true; - settings = { - mainBar = { - layer = "top"; - position = "top"; - height = 28; - spacing = 6; - margin-top = 0; - margin-bottom = 0; - margin-left = 10; - margin-right = 10; - - modules-left = [ - "sway/workspaces" - ]; - modules-center = [ - "clock" - "temperature" - "cpu" - "memory" - "disk" - ]; - modules-right = [ - "battery" - "battery#bat2" - "pulseaudio" - "network" - "bluetooth" - "power-profiles-daemon" - "backlight" - "custom/notifications" - "sway/language" - "tray" - "custom/power" - ]; - - "sway/workspaces" = { - format = "{icon}"; - format-icons = { - "1" = "一"; - "2" = "二"; - "3" = "三"; - "4" = "四"; - "5" = "五"; - "6" = "六"; - "7" = "七"; - "8" = "八"; - "9" = "九"; - "10" = "十"; - "11" = "十一"; - "12" = "十二"; - "13" = "十三"; - "14" = "十四"; - "15" = "十五"; - "16" = "十六"; - "17" = "十七"; - "18" = "十八"; - "19" = "十九"; - "20" = "二十"; - }; - disable-scroll = false; - }; - - # CENTER - clock = { - format = "{:%b %d, %H:%M}"; - tooltip-format = "{:%Y %B}\n{calendar}"; - }; - - temperature = { - thermal-zone = 2; - hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; - critical-threshold = 80; - format-critical = "󰔏 {temperatureC}°C"; - format = "󰔏 {temperatureC}°C"; - }; - - cpu = { - format = "󰻠 {usage}%"; - tooltip = true; - on-click = "btop"; - }; - - memory = { - format = "󰍛 {}%"; - on-click = "btop"; - }; - - disk = { - interval = 30; - format = "󰋊 {percentage_used}%"; - path = "/"; - on-click = "btop"; - }; - - # RIGHT - "battery" = { - "states" = { - # "good"= 95; - "warning" = 30; - "critical" = 15; - }; - "format" = "{capacity}% {icon}"; - "format-full" = "{capacity}% {icon}"; - "format-charging" = "{capacity}% "; - "format-plugged" = "{capacity}% "; - "format-alt" = "{time} {icon}"; - # "format-good"= ""; // An empty format will hide the module - # "format-full"= ""; - "format-icons" = [ - "" - "" - "" - "" - "" - ]; - }; - "battery#bat2" = { - "bat" = "BAT2"; - }; - - pulseaudio = { - format = "{icon} {volume}%"; - format-bluetooth = "󰂰 {volume}%"; - format-bluetooth-muted = "󰂲 "; - format-muted = "󰖁 "; - format-source = "󰍬 {volume}%"; - format-source-muted = "󰍭 "; - format-icons = { - headphone = "󰋋"; - hands-free = "󰂑"; - headset = "󰂑"; - phone = "󰏲"; - portable = "󰦧"; - car = "󰄋"; - default = [ - "󰕿" - "󰖀" - "󰕾" - ]; - }; - scroll-step = 5; - on-click = "pavucontrol"; - on-click-right = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - }; - - network = { - format-wifi = "󰤨 {essid} ({signalStrength}%)"; - format-ethernet = "󰈀 {ipaddr}/{cidr}"; - tooltip-format = "{ifname} via {gwaddr} "; - format-linked = "󰈀 {ifname} (No IP)"; - format-disconnected = "󰖪 Disconnected"; - # on-click = "wofi-wifi-menu"; - # on-click-right = "nmcli radio wifi toggle"; - }; - - bluetooth = { - format = "󰂯 {status}"; - format-connected = "󰂱 {device_alias}"; - format-connected-battery = "󰂱 {device_alias} {device_battery_percentage}%"; - tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected"; - tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}"; - tooltip-format-enumerate-connected = "{device_alias}\t{device_address}"; - tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_address}\t{device_battery_percentage}%"; - # on-click = "wofi-bluetooth-menu"; - # on-click-right = "bluetoothctl power toggle"; - }; - - "power-profiles-daemon" = { - format = "{icon}"; - "tooltip-format" = "Power profile: {profile}\nDriver: {driver}"; - tooltip = true; - "format-icons" = { - default = ""; - performance = ""; - balanced = ""; - "power-saver" = ""; - }; - }; - - backlight = { - format = "{percent}% {icon}"; - "format-icons" = [ - "" - "" - "" - "" - "" - "" - "" - "" - "" - ]; - }; - - "custom/notifications" = { - format = "{icon} {}"; - format-icons = { - notification = ""; - none = ""; - dnd-notification = "󰂛"; - dnd-none = "󰂛"; - inhibited-notification = ""; - inhibited-none = ""; - dnd-inhibited-notification = "󰂛"; - dnd-inhibited-none = "󰂛"; - }; - return-type = "json"; - exec-if = "which swaync-client"; - exec = "swaync-client -swb"; - on-click = "swaync-client -t -sw"; - on-click-right = "swaync-client -d -sw"; - escape = true; - tooltip = false; - }; - - "sway/language" = { - format = "{}"; - }; - - "tray" = { - "spacing" = 10; - }; - - "custom/power" = { - format = "⏻ "; - tooltip = false; - menu = "on-click"; - "menu-file" = ./waybar/power_menu.xml; - "menu-actions" = { - shutdown = "shutdown 0"; - reboot = "reboot"; - logout = "loginctl terminate-session $(loginctl list-sessions | grep seat0 | awk '{print $1}')"; - }; - }; - - }; - }; - - style = builtins.readFile ./waybar/waybar.css; - }; - }; -} diff --git a/common/flake.lock b/common/flake.lock deleted file mode 100644 index 2ba0955..0000000 --- a/common/flake.lock +++ /dev/null @@ -1,681 +0,0 @@ -{ - "nodes": { - "agenix": { - "inputs": { - "darwin": "darwin", - "home-manager": "home-manager_2", - "nixpkgs": [ - "ragenix", - "nixpkgs" - ], - "systems": "systems_2" - }, - "locked": { - "lastModified": 1736955230, - "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", - "owner": "ryantm", - "repo": "agenix", - "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", - "type": "github" - }, - "original": { - "owner": "ryantm", - "repo": "agenix", - "type": "github" - } - }, - "aquamarine": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759499898, - "narHash": "sha256-UNzYHLWfkSzLHDep5Ckb5tXc0fdxwPIrT+MY4kpQttM=", - "owner": "hyprwm", - "repo": "aquamarine", - "rev": "655e067f96fd44b3f5685e17f566b0e4d535d798", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "aquamarine", - "type": "github" - } - }, - "crane": { - "locked": { - "lastModified": 1741481578, - "narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=", - "owner": "ipetkov", - "repo": "crane", - "rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "darwin": { - "inputs": { - "nixpkgs": [ - "ragenix", - "agenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1700795494, - "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", - "owner": "lnl7", - "repo": "nix-darwin", - "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", - "type": "github" - }, - "original": { - "owner": "lnl7", - "ref": "master", - "repo": "nix-darwin", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems_3" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1758463745, - "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", - "owner": "rycee", - "repo": "home-manager", - "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", - "type": "github" - }, - "original": { - "owner": "rycee", - "ref": "release-25.05", - "repo": "home-manager", - "type": "github" - } - }, - "home-manager_2": { - "inputs": { - "nixpkgs": [ - "ragenix", - "agenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1703113217, - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "hyprcursor": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1753964049, - "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", - "owner": "hyprwm", - "repo": "hyprcursor", - "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprcursor", - "type": "github" - } - }, - "hyprgraphics": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759490292, - "narHash": "sha256-T6iWzDOXp8Wv0KQOCTHpBcmAOdHJ6zc/l9xaztW6Ivc=", - "owner": "hyprwm", - "repo": "hyprgraphics", - "rev": "9431db625cd9bb66ac55525479dce694101d6d7a", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprgraphics", - "type": "github" - } - }, - "hyprland": { - "inputs": { - "aquamarine": "aquamarine", - "hyprcursor": "hyprcursor", - "hyprgraphics": "hyprgraphics", - "hyprland-protocols": "hyprland-protocols", - "hyprland-qtutils": "hyprland-qtutils", - "hyprlang": "hyprlang", - "hyprutils": "hyprutils", - "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_2", - "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems", - "xdph": "xdph" - }, - "locked": { - "lastModified": 1759837778, - "narHash": "sha256-12GZqSrRYyhKl7NpNMUQECDi/Zyx17QZhhQ7+mBJMns=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "5ba2d2217b649c4ca2db7e3f383b3f6af6e70d65", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" - } - }, - "hyprland-protocols": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", - "owner": "hyprwm", - "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-protocols", - "type": "github" - } - }, - "hyprland-qt-support": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprland-qtutils", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "hyprland-qtutils", - "nixpkgs" - ], - "systems": [ - "hyprland", - "hyprland-qtutils", - "systems" - ] - }, - "locked": { - "lastModified": 1749154592, - "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "type": "github" - } - }, - "hyprland-qtutils": { - "inputs": { - "hyprland-qt-support": "hyprland-qt-support", - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprland-qtutils", - "hyprlang", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759080228, - "narHash": "sha256-RgDoAja0T1hnF0pTc56xPfLfFOO8Utol2iITwYbUhTk=", - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "rev": "629b15c19fa4082e4ce6be09fdb89e8c3312aed7", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "type": "github" - } - }, - "hyprlang": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1758927902, - "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprutils": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759490926, - "narHash": "sha256-7IbZGJ5qAAfZsGhBHIsP8MBsfuFYS0hsxYHVkkeDG5Q=", - "owner": "hyprwm", - "repo": "hyprutils", - "rev": "94cce794344538c4d865e38682684ec2bbdb2ef3", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprutils", - "type": "github" - } - }, - "hyprwayland-scanner": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "type": "github" - } - }, - "nix-flatpak": { - "locked": { - "lastModified": 1739444422, - "narHash": "sha256-iAVVHi7X3kWORftY+LVbRiStRnQEob2TULWyjMS6dWg=", - "owner": "gmodena", - "repo": "nix-flatpak", - "rev": "5e54c3ca05a7c7d968ae1ddeabe01d2a9bc1e177", - "type": "github" - }, - "original": { - "owner": "gmodena", - "ref": "latest", - "repo": "nix-flatpak", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1753345091, - "narHash": "sha256-CdX2Rtvp5I8HGu9swBmYuq+ILwRxpXdJwlpg8jvN4tU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3ff0e34b1383648053bba8ed03f201d3466f90c9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1759381078, - "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1741379970, - "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat", - "gitignore": "gitignore", - "nixpkgs": [ - "hyprland", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1758108966, - "narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "ragenix": { - "inputs": { - "agenix": "agenix", - "crane": "crane", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_3", - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1744897914, - "narHash": "sha256-GIVU92o2TZBnKQXTb76zpQbWR4zjU2rFqWKNIIpXnqA=", - "owner": "yaxitech", - "repo": "ragenix", - "rev": "40f2e17ecaeab4d78ec323e96a04548c0aaa5223", - "type": "github" - }, - "original": { - "owner": "yaxitech", - "repo": "ragenix", - "type": "github" - } - }, - "root": { - "inputs": { - "home-manager": "home-manager", - "hyprland": "hyprland", - "nix-flatpak": "nix-flatpak", - "ragenix": "ragenix" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "ragenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1741400194, - "narHash": "sha256-tEpgT+q5KlGjHSm8MnINgTPErEl8YDzX3Eps8PVc09g=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "16b6045a232fea0e9e4c69e55a6e269607dd8e3f", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "type": "github" - } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_3": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "xdph": { - "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755354946, - "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/common/flake.nix b/common/flake.nix deleted file mode 100644 index 9fcfe30..0000000 --- a/common/flake.nix +++ /dev/null @@ -1,85 +0,0 @@ -{ - inputs = { - # NOTE if you add/change any inputs here also add them in the TOP level repo's flake.nix - home-manager.url = "github:rycee/home-manager/release-25.05"; - ragenix.url = "github:yaxitech/ragenix"; - nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest"; - hyprland.url = "github:hyprwm/Hyprland"; - }; - - outputs = - { - home-manager, - ragenix, - nix-flatpak, - hyprland, - ... - }: - { - nixosModules = { - default = - { - config, - lib, - pkgs, - ... - }: - { - imports = [ - home-manager.nixosModules.default - ragenix.nixosModules.age - nix-flatpak.nixosModules.nix-flatpak - hyprland.nixosModules.default - ./_home_manager - ./options.nix - ./general - ./boot - ./desktop_environment - ./users - ./programs - ./secrets - ]; - config = { - nixpkgs.overlays = [ - # (final: prev: { - # wayland-protocols = - # nixpkgs-unstable.legacyPackages.${prev.stdenv.hostPlatform.system}.wayland-protocols; - # }) - ]; - _module.args = { - inherit ragenix; - inherit hyprland; - hyprlandPkgs = import hyprland.inputs.nixpkgs { - system = pkgs.stdenv.hostPlatform.system; - config = config.nixpkgs.config or { }; - }; - }; - }; - }; - containers = { - forgejo = import ./_containers/forgejo.nix; - }; - }; - homeManagerModules = { - zsh = import ./_home_manager/mods/zsh.nix; - tmux = import ./_home_manager/mods/tmux/tmux.nix; - atuin = import ./_home_manager/mods/atuin.nix; - zoxide = import ./_home_manager/mods/zoxide.nix; - starship = import ./_home_manager/mods/starship.nix; - direnv = import ./_home_manager/mods/direnv.nix; - ssh = import ./_home_manager/mods/ssh.nix; - git = import ./_home_manager/mods/git.nix; - nix_deprecations = import ./_home_manager/mods/nix_deprecations.nix; - - alacritty = import ./_home_manager/mods/alacritty.nix; - foot = import ./_home_manager/mods/foot.nix; - kitty = import ./_home_manager/mods/kitty.nix; - launcher_rofi = import ./_home_manager/mods/launcher_rofi.nix; - - obs = import ./_home_manager/mods/obs.nix; - postgres = import ./_home_manager/mods/postgres.nix; - slicer = import ./_home_manager/mods/slicer.nix; - - }; - }; -} diff --git a/common/general/default.nix b/common/general/default.nix deleted file mode 100644 index 49e8900..0000000 --- a/common/general/default.nix +++ /dev/null @@ -1,211 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "general" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - top_cfg = config.${ccfg.custom_config_key}; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - flakeOptions = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable nix flake options"; - }; - unfree = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable unfree packages"; - }; - readWindowsDrives = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Read windows drives"; - }; - disableRemoteBuildsOnLio = lib.mkOption { - type = lib.types.bool; - default = false; - description = "Disable remote builds on lio"; - }; - timezone = lib.mkOption { - type = lib.types.str; - default = "America/Chicago"; - description = "Timezone"; - }; - defaultLocal = lib.mkOption { - type = lib.types.str; - default = "en_US.UTF-8"; - description = "Default locale"; - }; - fastShutdown = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Fast shutdown"; - }; - enableSleep = lib.mkEnableOption (lib.mdDoc "Enable auto sleeping"); - hideBootLogs = lib.mkEnableOption (lib.mdDoc "Hide boot logs on startup"); - }; - imports = [ - ./shell/common.nix - ./fonts.nix - ./tty_caps_esc.nix - ./reporting.nix - ]; - config = { - # name this computer - networking = { - hostName = top_cfg.systemName; - nftables.enable = true; - nftables.flushRuleset = true; - firewall.enable = true; - }; - - # Enable flakes - nix.settings.experimental-features = lib.mkIf cfg.flakeOptions [ - "nix-command" - "flakes" - ]; - - # Allow unfree - nixpkgs.config.allowUnfree = cfg.unfree; - nixpkgs.config.allowUnfreePredicate = (pkg: cfg.unfree); - environment.variables = lib.mkIf cfg.unfree { - NIXPKGS_ALLOW_UNFREE = "1"; - }; - - # allow mounting ntfs filesystems - boot.supportedFilesystems = lib.mkIf cfg.readWindowsDrives [ "ntfs" ]; - - # make shutdown faster for waiting - systemd.extraConfig = lib.mkIf cfg.fastShutdown '' - DefaultTimeoutStopSec=8s - ''; - - nix.settings = { - max-jobs = "auto"; - # Fallback quickly if substituters are not available. - connect-timeout = 5; - download-attempts = 3; - download-buffer-size = 524288000; # default is 67108864, this increases to ~500MB - # The default at 10 is rarely enough. - log-lines = 50; - # Avoid disk full issues - max-free = (3000 * 1024 * 1024); - min-free = (1000 * 1024 * 1024); - # Avoid copying unnecessary stuff over SSH - builders-use-substitutes = true; - auto-optimise-store = true; - trusted-users = [ - "root" - "@wheel" - ]; - substituters = [ - "https://cache.nixos.org/" - "https://hyprland.cachix.org" - "https://cosmic.cachix.org/" - "https://nix-community.cachix.org" - ]; - trusted-substituters = config.nix.settings.substituters; - trusted-public-keys = [ - "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" - ]; - }; - nix.extraOptions = '' - keep-outputs = true - keep-derivations = true - ${lib.optionalString ( - # TODO revisit this should it move? - config ? age && config.age ? secrets && config.age.secrets ? github_read_token - ) "!include ${config.age.secrets.github_read_token.path}"} - ''; - - # Enable zsh - programs.zsh.enable = true; - environment.pathsToLink = [ "/share/zsh" ]; - - # nix helper - programs.nh = { - enable = true; - # clean.enable = true; # TODO revist does this solve my re-building issues? - clean.extraArgs = "--keep 10"; - # `flake` path is set in users/default.nix for the primary user if set - }; - - # Remote build off home lio computer - programs.ssh.extraConfig = lib.mkIf (!cfg.disableRemoteBuildsOnLio) '' - Host lio_ - PubkeyAcceptedKeyTypes ssh-ed25519 - ServerAliveInterval 60 - IPQoS throughput - ${lib.optionalString ( - config ? age && config.age ? secrets && config.age.secrets ? nix2lio - ) "IdentityFile ${config.age.secrets.nix2lio.path}"} - ''; - nix = { - distributedBuilds = lib.mkIf (!cfg.disableRemoteBuildsOnLio) true; - buildMachines = lib.mkIf (!cfg.disableRemoteBuildsOnLio) [ - { - hostName = "lio"; - system = "x86_64-linux"; - protocol = "ssh-ng"; - maxJobs = 32; - speedFactor = 2; - supportedFeatures = [ - "nixos-test" - "benchmark" - "big-parallel" - "kvm" - "uid-range" # Often helpful - ]; - mandatoryFeatures = [ ]; - } - ]; - }; - - # TODO can I make this Roaming automatically somehow? - time.timeZone = cfg.timezone; - # Select internationalization properties. - i18n.defaultLocale = cfg.defaultLocal; - i18n.extraLocaleSettings = { - LC_ADDRESS = cfg.defaultLocal; - LC_IDENTIFICATION = cfg.defaultLocal; - LC_MEASUREMENT = cfg.defaultLocal; - LC_MONETARY = cfg.defaultLocal; - LC_NAME = cfg.defaultLocal; - LC_NUMERIC = cfg.defaultLocal; - LC_PAPER = cfg.defaultLocal; - LC_TELEPHONE = cfg.defaultLocal; - LC_TIME = cfg.defaultLocal; - }; - - # Turn off sleep - systemd.sleep.extraConfig = lib.mkIf (!cfg.enableSleep) '' - [Sleep] - AllowSuspend=no - AllowHibernation=no - AllowSuspendThenHibernate=no - AllowHybridSleep=no - ''; - - # Hide boot logs - boot.initrd.verbose = cfg.hideBootLogs; - boot.consoleLogLevel = lib.mkIf cfg.hideBootLogs 3; - boot.kernelParams = lib.mkIf cfg.hideBootLogs [ - "quiet" - "loglevel=3" - "systemd.show_status=false" - ]; - }; -} diff --git a/common/general/fonts.nix b/common/general/fonts.nix deleted file mode 100644 index ebc1014..0000000 --- a/common/general/fonts.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: -let - hasNewJetbrainsMono = - if builtins.hasAttr "nerd-fonts" pkgs then - builtins.hasAttr "jetbrains-mono" pkgs."nerd-fonts" - else - false; - - jetbrainsMonoFont = - if hasNewJetbrainsMono then - pkgs.nerd-fonts.jetbrains-mono - else - (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }); - - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "general" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - jetbrainsMonoFont = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable jetbrains mono font"; - }; - japaneseFonts = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable japanese fonts"; - }; - }; - - config = { - fonts.packages = - lib.optionals cfg.jetbrainsMonoFont [ - jetbrainsMonoFont - ] - ++ lib.optionals cfg.japaneseFonts ( - with pkgs; - [ - ipafont - kochi-substitute - noto-fonts-cjk-sans # Or another CJK font - ] - ); - - fonts.fontconfig.enable = true; - }; -} diff --git a/common/general/reporting.nix b/common/general/reporting.nix deleted file mode 100644 index f769402..0000000 --- a/common/general/reporting.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ - lib, - config, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "general" - "reporting" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "Reporting node info and logs to grafana"; - lokiUrl = lib.mkOption { - type = lib.types.str; - default = "http://h001.net.joshuabell.xyz:3100/loki/api/v1/push"; - description = "URL of the Loki instance to send logs to"; - }; - }; - - config = lib.mkIf cfg.enable { - services.prometheus.exporters.node = { - enable = true; - port = 9100; - }; - - # Create necessary directories with appropriate permissions - systemd.tmpfiles.rules = [ - "d /tmp/positions 1777 - - -" # World-writable directory for positions file - "f /tmp/positions.yaml 0666 - - -" # World-writable positions file - ]; - users.groups.systemd-journal.members = [ "promtail" ]; - services.promtail = { - enable = true; - extraFlags = [ - "-config.expand-env=true" - ]; - configuration = { - server = { - http_listen_port = 9080; - grpc_listen_port = 0; - }; - positions = { - filename = "/tmp/positions.yaml"; # Changed from /var/lib/promtail/positions.yaml - }; - clients = [ - { - url = cfg.lokiUrl; - } - ]; - scrape_configs = [ - { - job_name = "journal"; - journal = { - json = false; - max_age = "12h"; - path = "/var/log/journal"; - labels = { - job = "systemd-journal"; - host = config.networking.hostName; - }; - }; - relabel_configs = [ - { - source_labels = [ "__journal__systemd_unit" ]; - target_label = "unit"; - } - ]; - } - ]; - }; - }; - }; -} diff --git a/common/general/shell/common.nix b/common/general/shell/common.nix deleted file mode 100644 index 2d79ea5..0000000 --- a/common/general/shell/common.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ - lib, - pkgs, - ... -}: -with lib; -{ - config = { - environment.systemPackages = with pkgs; [ - # Basics - vim - nano - wget - curl - jq - fastfetch - bat - htop - unzip - git - fzf - ripgrep - lsof - killall - hdparm - speedtest-cli - lf - ]; - - environment.shellAliases = { - n = "nvim"; - nn = "nvim --headless '+SessionDelete' +qa > /dev/null 2>&1 && nvim"; - bat = "bat --theme Coldark-Dark"; - cat = "bat --pager=never -p"; - # TODO this may not be needed now that I am using `nh` clean mode (see /hosts/_common/configuration.nix#programs.nh) - nix-boot-clean = "find '/boot/loader/entries' -type f ! -name 'windows.conf' | head -n -4 | xargs -I {} rm {}; nix store gc; nixos-rebuild boot; echo; df"; - ndr = "nix-direnv-reload"; - - # general unix - date_compact = "date +'%Y%m%d'"; - date_short = "date +'%Y-%m-%d'"; - ls = "ls --color -Gah"; - ll = "ls --color -Galhtr"; - lss = "du --max-depth=0 -h {.,}* 2>/dev/null | sort -hr"; - psg = "ps aux | head -n 1 && ps aux | grep -v 'grep' | grep"; - cl = "clear"; - - # git - status = "git status"; - diff = "git diff"; - branches = "git branch -a"; - gcam = "git commit -a -m"; - gcm = "git commit -m"; - stashes = "git stash list"; - bd = "branch default"; - li = "link_ignored"; - bx = "branchdel"; - b = "branch"; - - # ripgrep - rg = "rg --no-ignore"; - rgf = "rg --files --glob '!/nix/store/**' 2>/dev/null | rg"; - }; - - environment.shellInit = lib.concatStringsSep "\n\n" [ - (builtins.readFile ./common.sh) - (builtins.readFile ./tmux_helpers.sh) - (builtins.readFile ./branch.func.sh) - (builtins.readFile ./branchd.func.sh) - (builtins.readFile ./link_ignored.func.sh) - ]; - }; -} diff --git a/common/general/tty_caps_esc.nix b/common/general/tty_caps_esc.nix deleted file mode 100644 index 7223bfe..0000000 --- a/common/general/tty_caps_esc.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "general" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - ttyCapsEscape = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable caps for escape key"; - }; - }; - config = lib.mkIf cfg.ttyCapsEscape { - services.xserver.xkb.options = "caps:escape"; - console = { - earlySetup = true; - packages = with pkgs; [ terminus_font ]; - useXkbConfig = true; # use xkb.options in tty. (caps -> escape) - }; - }; -} diff --git a/common/options.nix b/common/options.nix deleted file mode 100644 index 7bcb038..0000000 --- a/common/options.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ./config.nix; - cfg_path = "${ccfg.custom_config_key}"; - cfg = config.${cfg_path}; -in -{ - options.${cfg_path} = { - systemName = lib.mkOption { - type = lib.types.str; - description = "The name of the system."; - }; - }; -} diff --git a/common/programs/default.nix b/common/programs/default.nix deleted file mode 100644 index c56a1ab..0000000 --- a/common/programs/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, lib, ... }: -let - ccfg = import ../config.nix; - cfg = config.${ccfg.custom_config_key}.programs; -in -{ - imports = [ - ./qFlipper.nix - ./rustDev.nix - ./uhkAgent.nix - ./tailnet.nix - ./ssh.nix - ./docker.nix - ./podman.nix - ./incus.nix - ./flatpaks.nix - ./virt-manager.nix - ]; - config = { - assertions = [ - ( - let - enabledVirtualizers = lib.filter (x: x.enabled) [ - { - name = "docker"; - enabled = cfg.docker.enable; - } - { - name = "podman"; - enabled = cfg.podman.enable; - } - ]; - in - { - assertion = lib.length enabledVirtualizers <= 1; - message = - "Only one virtualizer can be enabled at a time. Enabled: " - + lib.concatStringsSep ", " (map (x: x.name) enabledVirtualizers); - } - ) - ]; - }; -} diff --git a/common/programs/docker.nix b/common/programs/docker.nix deleted file mode 100644 index c3aea93..0000000 --- a/common/programs/docker.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "docker" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - users_cfg = config.${ccfg.custom_config_key}.users; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "docker"; - }; - - config = lib.mkIf cfg.enable { - virtualisation.docker = { - enable = true; - autoPrune.enable = true; - }; - # TODO add admins? - users.extraGroups.docker.members = lib.mkIf (users_cfg.primary != null) [ users_cfg.primary ]; - environment.shellAliases = { - dockerv = "docker volume"; - dockeri = "docker image"; - dockerc = "docker container"; - }; - }; -} diff --git a/common/programs/flatpaks.nix b/common/programs/flatpaks.nix deleted file mode 100644 index 307fff2..0000000 --- a/common/programs/flatpaks.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "flatpaks" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "flatpaks"; - packages = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = [ ]; - description = "List of Flatpak package names to install."; - }; - }; - - config = lib.mkIf cfg.enable { - services.flatpak = { - enable = true; - packages = cfg.packages; - overrides = { - global = { - Context.sockets = [ - "wayland" - "x11" - ]; - Context.devices = [ "dri" ]; # allow GPU access if desired - Environment = { - XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons"; - GTK_THEME = "Adwaita:dark"; - # Force wayland as much as possible. - ELECTRON_OZONE_PLATFORM_HINT = "auto"; # or 'auto' - GTK_USE_PORTAL = "1"; - OZONE_PLATFORM = "wayland"; - QT_QPA_PLATFORM = "xcb"; # force XCB for Flatpaks (XWayland) - }; - }; - "org.signal.Signal" = { - Environment = { - SIGNAL_PASSWORD_STORE = "gnome-libsecret"; - }; - Context = { - sockets = [ - "xfg-settings" - ]; - }; - }; - "com.google.Chrome" = { - Environment = { - CHROME_EXTRA_ARGS = "--enable-features=WaylandWindowDecorations --ozone-platform-hint=auto"; - }; - }; - }; - }; - }; -} diff --git a/common/programs/incus.nix b/common/programs/incus.nix deleted file mode 100644 index 01f0980..0000000 --- a/common/programs/incus.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "incus" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - users_cfg = config.${ccfg.custom_config_key}.users; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "incus"; - }; - - config = lib.mkIf cfg.enable { - virtualisation.incus = { - enable = true; - agent.enable = true; - ui.enable = true; - }; - - users.extraGroups.incus_admin.members = lib.mkIf (users_cfg.primary != null) [ users_cfg.primary ]; - users.extraGroups.incus.members = lib.mkIf (users_cfg.primary != null) [ users_cfg.primary ]; - }; -} diff --git a/common/programs/podman.nix b/common/programs/podman.nix deleted file mode 100644 index 8be88f9..0000000 --- a/common/programs/podman.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "podman" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - users_cfg = config.${ccfg.custom_config_key}.users; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "podman"; - }; - - config = lib.mkIf cfg.enable { - virtualisation.podman = { - enable = true; - dockerSocket.enable = true; - autoPrune.enable = true; - }; - # TODO add admins? - users.extraGroups.podman.members = lib.mkIf (users_cfg.primary != null) [ users_cfg.primary ]; - }; -} diff --git a/common/programs/qFlipper.nix b/common/programs/qFlipper.nix deleted file mode 100644 index 823ef99..0000000 --- a/common/programs/qFlipper.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "qFlipper" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "qFlipper"; - }; - - config = lib.mkIf cfg.enable { - hardware.flipperzero.enable = true; - environment.systemPackages = with pkgs; [ qFlipper ]; - services.udev.extraRules = '' - #Flipper Zero serial port - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ATTRS{manufacturer}=="Flipper Devices Inc.", GROUP="users", TAG+="uaccess" - #Flipper Zero DFU - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", ATTRS{manufacturer}=="STMicroelectronics", GROUP="users", TAG+="uaccess" - ''; - }; -} diff --git a/common/programs/rustDev.nix b/common/programs/rustDev.nix deleted file mode 100644 index dd226fb..0000000 --- a/common/programs/rustDev.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "rustDev" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "rust development tools"; - repl = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable the evcxr repl for `rust` command."; - }; - # TODO? - # channel = lib.mkOption { - # type = lib.types.str; - # default = "stable"; - # description = "The Rust release channel to use (e.g., stable, beta, nightly)."; - # }; - # version = lib.mkOption { - # type = lib.types.str; - # default = "latest"; - # description = "The specific version of Rust to use. Use 'latest' for the latest stable release."; - # }; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = - with pkgs; - [ - rustup - gcc - ] - ++ (if cfg.repl then [ pkgs.evcxr ] else [ ]); - - environment.shellAliases = lib.mkIf cfg.repl { - rust = "evcxr"; - }; - }; - -} diff --git a/common/programs/ssh.nix b/common/programs/ssh.nix deleted file mode 100644 index 6b0cea7..0000000 --- a/common/programs/ssh.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "ssh" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - users_cfg = config.${ccfg.custom_config_key}.users; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "ssh"; - sshPortOpen = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Open the ssh port."; - }; - fail2Ban = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Enable fail2ban."; - }; - allowPasswordLogin = lib.mkOption { - type = lib.types.bool; - default = false; - description = "Allow root password login."; - }; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - openssh - autossh - ]; - - # Use fail2ban - services.fail2ban = lib.mkIf cfg.fail2Ban { - enable = true; - # Ignore my tailnet - ignoreIP = [ - "100.64.0.0/10" - ]; - }; - - # Open ports in the firewall if enabled. - networking.firewall.allowedTCPPorts = lib.mkIf cfg.sshPortOpen [ - 22 # sshd - ]; - - # Enable the OpenSSH daemon. - services.openssh = { - enable = true; - settings = { - LogLevel = "VERBOSE"; - PermitRootLogin = "yes"; - PasswordAuthentication = cfg.allowPasswordLogin; - }; - }; - - # Ensure SSH key pair generation for non-root users - systemd.services = lib.mapAttrs' (name: _: { - name = "generate_ssh_key_${name}"; - value = { - description = "Generate SSH key pair for ${name}"; - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - User = name; - Type = "oneshot"; - }; - script = '' - #!/run/current-system/sw/bin/bash - if [ ! -f /home/${name}/.ssh/id_ed25519 ]; then - if [ -v DRY_RUN ]; then - echo "DRY_RUN is set. Would generate SSH key for ${name}."; - else - echo "Generating SSH key for ${name}."; - mkdir -p /home/${name}/.ssh; - chmod 700 /home/${name}/.ssh; - /run/current-system/sw/bin/ssh-keygen -t ed25519 -f /home/${name}/.ssh/id_ed25519 -N ""; - fi - else - echo "SSH key already exists for ${name}."; - fi - ''; - }; - }) users_cfg.users; - }; -} diff --git a/common/programs/tailnet.nix b/common/programs/tailnet.nix deleted file mode 100644 index bcbe53f..0000000 --- a/common/programs/tailnet.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "tailnet" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "enable tailnet"; - useHeadscale = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Whether to use headscale login server."; - }; - enableExitNode = lib.mkOption { - type = lib.types.bool; - default = false; - description = "Whether to enable exit node."; - }; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ tailscale ]; - services.tailscale = { - enable = true; - openFirewall = true; - useRoutingFeatures = if cfg.enableExitNode then "both" else "client"; - authKeyFile = lib.mkIf ( - config ? age && config.age ? secrets && config.age.secrets ? headscale_auth - ) config.age.secrets.headscale_auth.path; - extraUpFlags = - (lib.optionals cfg.useHeadscale [ - "--login-server=https://headscale.joshuabell.xyz" - ]) - ++ (lib.optionals cfg.enableExitNode [ "--advertise-exit-node" ]); - - }; - networking.firewall.trustedInterfaces = [ config.services.tailscale.interfaceName ]; - networking.firewall.checkReversePath = "loose"; - }; - -} diff --git a/common/programs/uhkAgent.nix b/common/programs/uhkAgent.nix deleted file mode 100644 index 90a9c3a..0000000 --- a/common/programs/uhkAgent.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "uhkAgent" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "uhk agent (ultimate hacking keyboard)"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - uhk-agent - uhk-udev-rules - ]; - services.udev.packages = [ pkgs.uhk-udev-rules ]; - }; - -} diff --git a/common/programs/virt-manager.nix b/common/programs/virt-manager.nix deleted file mode 100644 index fb837b1..0000000 --- a/common/programs/virt-manager.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "programs" - "virt-manager" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - users_cfg = config.${ccfg.custom_config_key}.users; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "Enable virt manager/quemu"; - users = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = builtins.attrNames users_cfg; - description = "Users to configure for virt-manager."; - }; - }; - - config = lib.mkIf cfg.enable { - services.qemuGuest.enable = true; - services.spice-vdagentd.enable = true; - programs.virt-manager = { - enable = true; - }; - - virtualisation = { - libvirtd.enable = true; - spiceUSBRedirection.enable = true; - }; - - users.groups.libvirtd.members = cfg.users; - }; -} diff --git a/common/secrets/default.nix b/common/secrets/default.nix deleted file mode 100644 index 047b382..0000000 --- a/common/secrets/default.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - config, - ragenix, - lib, - pkgs, - ... -}: - -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "secrets" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - users_cfg = config.${ccfg.custom_config_key}.users; - - secretsRaw = import ./secrets/secrets.nix; - systemName = lib.attrsets.getAttrFromPath [ - ccfg.custom_config_key - "systemName" - ] config; - authorityMarker = "authority"; - - # Key matches this host if its trailing comment contains "@" - matchesThisSystem = key: lib.strings.hasInfix "@${systemName}" key; - # Key is the authority key if its comment contains the marker string - matchesAuthority = key: lib.strings.hasInfix authorityMarker key; - - keepSecret = - attrs: - let - keys = attrs.publicKeys or [ ]; - in - lib.any (k: matchesThisSystem k) keys; - - # Any secrets that should be world-readable even after auto-import - worldReadable = [ - "zitadel_master_key" - "openwebui_env" - "vaultwarden_env" - ]; - - # Keep only secrets intended for this host (or that include the authority key) - filteredSecrets = lib.attrsets.filterAttrs (_name: attrs: keepSecret attrs) secretsRaw; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - enable = lib.mkEnableOption "secrets"; - }; - config = lib.mkIf cfg.enable { - environment.systemPackages = [ - ragenix.packages.${pkgs.system}.default - pkgs.rage - ]; - - age = { - secrets = lib.attrsets.mapAttrs' ( - name: _attrs: - let - base = lib.removeSuffix ".age" name; - in - lib.nameValuePair base ( - { - file = ./. + "/secrets/${name}"; - owner = users_cfg.primary; - } - // lib.optionalAttrs (lib.elem base worldReadable) { - mode = "444"; - } - ) - ) filteredSecrets; - }; - }; -} diff --git a/common/users/default.nix b/common/users/default.nix deleted file mode 100644 index 8561d8d..0000000 --- a/common/users/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - config, - lib, - ... -}: -let - ccfg = import ../config.nix; - cfg_path = [ - ccfg.custom_config_key - "users" - ]; - cfg = lib.attrsets.getAttrFromPath cfg_path config; - top_cfg = config.${ccfg.custom_config_key}; -in -{ - options = - { } - // lib.attrsets.setAttrByPath cfg_path { - admins = lib.mkOption { - type = lib.types.listOf lib.types.str; - default = [ ]; - example = [ "josh" ]; - description = '' - List of users to be added to the system. - ''; - }; - primary = lib.mkOption { - type = lib.types.str; - default = lib.optionalString (cfg.admins != [ ] && cfg.admins != null) ( - builtins.elemAt cfg.admins 0 - ); - description = "The primary user of the system."; - }; - users = lib.mkOption { - type = lib.types.attrsOf lib.types.attrs; - default = { }; - description = "Normal users to configure (not for system users). Should match nix options of users.userser..*"; - }; - }; - config = { - users.users = lib.mapAttrs ( - name: userConfig: - userConfig - // { - inherit name; - isNormalUser = lib.mkIf (name != "root") true; - initialPassword = - if (lib.hasAttr "initialPassword" userConfig) then userConfig.initialPassword else "password1"; - extraGroups = - lib.optionals (builtins.elem name cfg.admins) [ "wheel" ] ++ (userConfig.extraGroups or [ ]); - } - ) cfg.users; - - programs.nh.flake = lib.mkIf (lib.hasAttr "primary" cfg) "/home/${cfg.primary}/.config/nixos-config/hosts/${top_cfg.systemName}"; - }; -} diff --git a/flake.lock b/flake.lock index 3175bc7..c0c2de1 100644 --- a/flake.lock +++ b/flake.lock @@ -1,511 +1,12 @@ { "nodes": { - "agenix": { - "inputs": { - "darwin": "darwin", - "home-manager": "home-manager_2", - "nixpkgs": [ - "ragenix", - "nixpkgs" - ], - "systems": "systems_2" - }, - "locked": { - "lastModified": 1736955230, - "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", - "owner": "ryantm", - "repo": "agenix", - "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", - "type": "github" - }, - "original": { - "owner": "ryantm", - "repo": "agenix", - "type": "github" - } - }, - "aquamarine": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755946532, - "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", - "owner": "hyprwm", - "repo": "aquamarine", - "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "aquamarine", - "type": "github" - } - }, - "crane": { - "locked": { - "lastModified": 1741481578, - "narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=", - "owner": "ipetkov", - "repo": "crane", - "rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "darwin": { - "inputs": { - "nixpkgs": [ - "ragenix", - "agenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1700795494, - "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", - "owner": "lnl7", - "repo": "nix-darwin", - "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", - "type": "github" - }, - "original": { - "owner": "lnl7", - "ref": "master", - "repo": "nix-darwin", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems_3" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1758463745, - "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", - "owner": "rycee", - "repo": "home-manager", - "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", - "type": "github" - }, - "original": { - "owner": "rycee", - "ref": "release-25.05", - "repo": "home-manager", - "type": "github" - } - }, - "home-manager_2": { - "inputs": { - "nixpkgs": [ - "ragenix", - "agenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1703113217, - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "hyprcursor": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1753964049, - "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", - "owner": "hyprwm", - "repo": "hyprcursor", - "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprcursor", - "type": "github" - } - }, - "hyprgraphics": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1758192433, - "narHash": "sha256-CR6RnqEJSTiFgA6KQY4TTLUWbZ8RBnb+hxQqesuQNzQ=", - "owner": "hyprwm", - "repo": "hyprgraphics", - "rev": "c44e749dd611521dee940d00f7c444ee0ae4cfb7", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprgraphics", - "type": "github" - } - }, - "hyprland": { - "inputs": { - "aquamarine": "aquamarine", - "hyprcursor": "hyprcursor", - "hyprgraphics": "hyprgraphics", - "hyprland-protocols": "hyprland-protocols", - "hyprland-qtutils": "hyprland-qtutils", - "hyprlang": "hyprlang", - "hyprutils": "hyprutils", - "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_2", - "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems", - "xdph": "xdph" - }, - "locked": { - "lastModified": 1759094452, - "narHash": "sha256-j7IOTFnQRDjX4PzYb2p6CPviAc8cDrcorzGpM8J89uM=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "f854b5bffbdd13cfe7edad0ee157d6947ff99619", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" - } - }, - "hyprland-protocols": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", - "owner": "hyprwm", - "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-protocols", - "type": "github" - } - }, - "hyprland-qt-support": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprland-qtutils", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "hyprland-qtutils", - "nixpkgs" - ], - "systems": [ - "hyprland", - "hyprland-qtutils", - "systems" - ] - }, - "locked": { - "lastModified": 1749154592, - "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "type": "github" - } - }, - "hyprland-qtutils": { - "inputs": { - "hyprland-qt-support": "hyprland-qt-support", - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprland-qtutils", - "hyprlang", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1757694755, - "narHash": "sha256-j+w5QUUr2QT/jkxgVKecGYV8J7fpzXCMgzEEr6LG9ug=", - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "rev": "5ffdfc13ed03df1dae5084468d935f0a3f2c9a4c", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "type": "github" - } - }, - "hyprlang": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1756810301, - "narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprutils": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1756117388, - "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", - "owner": "hyprwm", - "repo": "hyprutils", - "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprutils", - "type": "github" - } - }, - "hyprwayland-scanner": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "type": "github" - } - }, - "nix-flatpak": { - "locked": { - "lastModified": 1739444422, - "narHash": "sha256-iAVVHi7X3kWORftY+LVbRiStRnQEob2TULWyjMS6dWg=", - "owner": "gmodena", - "repo": "nix-flatpak", - "rev": "5e54c3ca05a7c7d968ae1ddeabe01d2a9bc1e177", - "type": "github" - }, - "original": { - "owner": "gmodena", - "ref": "latest", - "repo": "nix-flatpak", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1753345091, - "narHash": "sha256-CdX2Rtvp5I8HGu9swBmYuq+ILwRxpXdJwlpg8jvN4tU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3ff0e34b1383648053bba8ed03f201d3466f90c9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1758198701, - "narHash": "sha256-7To75JlpekfUmdkUZewnT6MoBANS0XVypW6kjUOXQwc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0147c2f1d54b30b5dd6d4a8c8542e8d7edf93b5d", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1758690382, - "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", + "lastModified": 1760524057, + "narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5", "type": "github" }, "original": { @@ -515,181 +16,9 @@ "type": "github" } }, - "nixpkgs_4": { - "locked": { - "lastModified": 1741379970, - "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat", - "gitignore": "gitignore", - "nixpkgs": [ - "hyprland", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1758108966, - "narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "ragenix": { - "inputs": { - "agenix": "agenix", - "crane": "crane", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_4", - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1744897914, - "narHash": "sha256-GIVU92o2TZBnKQXTb76zpQbWR4zjU2rFqWKNIIpXnqA=", - "owner": "yaxitech", - "repo": "ragenix", - "rev": "40f2e17ecaeab4d78ec323e96a04548c0aaa5223", - "type": "github" - }, - "original": { - "owner": "yaxitech", - "repo": "ragenix", - "type": "github" - } - }, "root": { "inputs": { - "home-manager": "home-manager", - "hyprland": "hyprland", - "nix-flatpak": "nix-flatpak", - "nixpkgs": "nixpkgs_3", - "ragenix": "ragenix" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "ragenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1741400194, - "narHash": "sha256-tEpgT+q5KlGjHSm8MnINgTPErEl8YDzX3Eps8PVc09g=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "16b6045a232fea0e9e4c69e55a6e269607dd8e3f", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "type": "github" - } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_3": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "xdph": { - "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755354946, - "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "type": "github" + "nixpkgs": "nixpkgs" } } }, diff --git a/flake.nix b/flake.nix index e5eadfd..1444a5b 100644 --- a/flake.nix +++ b/flake.nix @@ -1,24 +1,13 @@ { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - - # Manually synced with common/flake.nix inputs - # ===== - home-manager.url = "github:rycee/home-manager/release-25.05"; - ragenix.url = "github:yaxitech/ragenix"; - nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest"; - hyprland.url = "github:hyprwm/Hyprland"; - # ====== }; outputs = { nixpkgs, - home-manager, - ragenix, - nix-flatpak, ... - }@inputs: + }: let # Utilities inherit (nixpkgs) lib; @@ -26,8 +15,6 @@ forAllSystems = lib.genAttrs lib.systems.flakeExposed; # Create a mapping from system to corresponding nixpkgs : https://nixos.wiki/wiki/Overlays#In_a_Nix_flake nixpkgsFor = forAllSystems (system: nixpkgs.legacyPackages.${system}); - - commonFlake = (import ./common/flake.nix).outputs inputs; in { devShells = forAllSystems ( @@ -69,6 +56,5 @@ }; } ); - } - // commonFlake; + }; } diff --git a/flakes/common/flake.nix b/flakes/common/flake.nix new file mode 100644 index 0000000..39470ef --- /dev/null +++ b/flakes/common/flake.nix @@ -0,0 +1,16 @@ +{ + description = "Common NixOS configuration modules and Home Manager modules that require not other inputs beyond nixpkgs or home-manager itself. This is made by me for me and not designed to be general purpose for anyone else, but could be useful nontheless."; + inputs = { }; + outputs = + { + ... + }: + let + utils = import ./utils.nix; + in + with utils; + { + nixosModules = importAll ./nix_modules; + homeManagerModules = importAll ./hm_modules; + }; +} diff --git a/common/_home_manager/mods/alacritty.nix b/flakes/common/hm_modules/alacritty.nix similarity index 96% rename from common/_home_manager/mods/alacritty.nix rename to flakes/common/hm_modules/alacritty.nix index 0794c15..02cb9d6 100644 --- a/common/_home_manager/mods/alacritty.nix +++ b/flakes/common/hm_modules/alacritty.nix @@ -6,6 +6,7 @@ window = { decorations = "None"; dynamic_title = false; + opacity = 0.94; }; colors = { primary = { diff --git a/common/_home_manager/mods/atuin.nix b/flakes/common/hm_modules/atuin.nix similarity index 64% rename from common/_home_manager/mods/atuin.nix rename to flakes/common/hm_modules/atuin.nix index 2eb52df..021745f 100644 --- a/common/_home_manager/mods/atuin.nix +++ b/flakes/common/hm_modules/atuin.nix @@ -1,16 +1,18 @@ { ... }: +# TODO setup auto secret/login for sync { programs.atuin = { enable = true; - enableZshIntegration = true; + enableZshIntegration = true; # TODO make dynamic? flags = [ "--disable-up-arrow" ]; settings = { workspaces = true; exit-mode = "return-query"; enter_accept = true; sync_address = "https://atuin.joshuabell.xyz"; - sync = { records = true; }; + sync = { + records = true; + }; }; }; } - diff --git a/flakes/common/hm_modules/de_i3/default.nix b/flakes/common/hm_modules/de_i3/default.nix new file mode 100644 index 0000000..7af8291 --- /dev/null +++ b/flakes/common/hm_modules/de_i3/default.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + imports = [ ./i3.nix ./polybar.nix ]; +} diff --git a/flakes/common/hm_modules/de_i3/i3.nix b/flakes/common/hm_modules/de_i3/i3.nix new file mode 100644 index 0000000..14b5404 --- /dev/null +++ b/flakes/common/hm_modules/de_i3/i3.nix @@ -0,0 +1,88 @@ +{ pkgs, ... }: +{ + xsession.enable = true; + xsession.windowManager.i3 = { + enable = true; + package = pkgs.i3; + extraConfig = '' + focus_follows_mouse no + default_border pixel 1 + default_floating_border pixel 1 + floating_modifier Mod4 + ''; + config = rec { + modifier = "Mod4"; + terminal = "kitty"; + menu = "rofi -show drun"; + + + focus.followMouse = false; + + gaps = { + inner = 2; + outer = 5; + smartBorders = "on"; + }; + + keybindings = { + "${modifier}+Return" = "exec ${terminal}"; + "${modifier}+space" = "exec pkill rofi || rofi -show drun"; + "${modifier}+q" = "kill"; + "${modifier}+shift+Escape" = "exit"; + "${modifier}+shift+q" = "exec i3lock"; + "${modifier}+f" = "floating toggle"; + + "${modifier}+h" = "focus left"; + "${modifier}+l" = "focus right"; + "${modifier}+k" = "focus up"; + "${modifier}+j" = "focus down"; + + "${modifier}+1" = "workspace number 1"; + "${modifier}+n" = "workspace number 1"; + "${modifier}+2" = "workspace number 2"; + "${modifier}+m" = "workspace number 2"; + "${modifier}+3" = "workspace number 3"; + "${modifier}+comma" = "workspace number 3"; + "${modifier}+4" = "workspace number 4"; + "${modifier}+period" = "workspace number 4"; + "${modifier}+5" = "workspace number 5"; + "${modifier}+slash" = "workspace number 5"; + "${modifier}+6" = "workspace number 6"; + "${modifier}+7" = "workspace number 7"; + "${modifier}+8" = "workspace number 8"; + "${modifier}+9" = "workspace number 9"; + "${modifier}+0" = "workspace number 10"; + + "${modifier}+shift+h" = "move left"; + "${modifier}+shift+l" = "move right"; + "${modifier}+shift+k" = "move up"; + "${modifier}+shift+j" = "move down"; + "${modifier}+shift+1" = "move container to workspace number 1"; + "${modifier}+shift+n" = "move container to workspace number 1"; + "${modifier}+shift+2" = "move container to workspace number 2"; + "${modifier}+shift+m" = "move container to workspace number 2"; + "${modifier}+shift+3" = "move container to workspace number 3"; + "${modifier}+shift+comma" = "move container to workspace number 3"; + "${modifier}+shift+4" = "move container to workspace number 4"; + "${modifier}+shift+period" = "move container to workspace number 4"; + "${modifier}+shift+5" = "move container to workspace number 5"; + "${modifier}+shift+slash" = "move container to workspace number 5"; + "${modifier}+shift+6" = "move container to workspace number 6"; + "${modifier}+shift+7" = "move container to workspace number 7"; + "${modifier}+shift+8" = "move container to workspace number 8"; + "${modifier}+shift+9" = "move container to workspace number 9"; + "${modifier}+shift+0" = "move container to workspace number 10"; + + "${modifier}+Left" = "resize shrink width 10 px or 10 ppt"; + "${modifier}+Down" = "resize shrink height 10 px or 10 ppt"; + "${modifier}+Up" = "resize grow height 10 px or 10 ppt"; + "${modifier}+Right" = "resize grow width 10 px or 10 ppt"; + + "Print" = "exec sh -c 'maim -s | xclip -selection clipboard -t image/png'"; + }; + + bars = [ ]; + startup = [ ]; + }; + }; +} diff --git a/flakes/common/hm_modules/de_i3/polybar.nix b/flakes/common/hm_modules/de_i3/polybar.nix new file mode 100644 index 0000000..e19f86b --- /dev/null +++ b/flakes/common/hm_modules/de_i3/polybar.nix @@ -0,0 +1,306 @@ +{ lib, pkgs, ... }: +let + mf = "#3b3b3bcc"; + bg = "#00000000"; + fg = "#FFFFFF"; + + polybarRun = pkgs.writeShellScriptBin "pbr" '' + polybar -m | while IFS=: read -r mon rest; do + if echo "$rest" | ${pkgs.gnugrep}/bin/grep -q "(primary)"; then + MONITOR="$mon" polybar -r primary & + else + MONITOR="$mon" polybar -r others & + fi + done + wait + ''; +in +{ + services.polybar = { + enable = true; + package = pkgs.polybar.override { + i3Support = true; + iwSupport = true; + pulseSupport = true; + }; + script = "${polybarRun}/bin/pbr"; + settings = { + "global/wm" = { + margin-bottom = 0; + margin-top = 5; + }; + + "bar/main" = { + monitor = "\${env:MONITOR}"; + width = "100%"; + height = 20; + radius = 0; + background = bg; + foreground = fg; + font-0 = "JetBrainsMono Nerd Font:size=11;2"; + font-1 = "Noto Sans CJK JP:size=11;2"; + + cursor-click = "pointer"; + enable-ipc = true; + }; + + "bar/primary" = { + "inherit" = "bar/main"; + modules-left = "i3"; + modules-center = "clock temperature cpu memory filesystem"; + modules-right = "volume tray powermenu"; + # modules-right = "volume network bluetooth backlight tray powermenu"; + }; + + "bar/others" = { + "inherit" = "bar/main"; + modules-left = "i3"; + modules-center = "clock temperature cpu memory filesystem"; + modules-right = ""; + }; + + "settings" = { + screenchange-reload = true; + + compositing-background = "source"; + compositing-foreground = "over"; + compositing-overline = "over"; + comppositing-underline = "over"; + compositing-border = "over"; + + pseudo-transparency = true; + }; + + "module/i3" = { + type = "internal/i3"; + index-sort = true; + pin-workspaces = true; + strip-wsnumbers = true; + wrapping-scroll = false; + format = ""; + + ws-icon-0 = "1;一"; + ws-icon-1 = "2;二"; + ws-icon-2 = "3;三"; + ws-icon-3 = "4;四"; + ws-icon-4 = "5;五"; + ws-icon-5 = "6;六"; + ws-icon-6 = "7;七"; + ws-icon-7 = "8;八"; + ws-icon-8 = "9;九"; + ws-icon-9 = "10;十"; + + label-unfocused = "%icon%"; + label-focused = "%icon%"; + label-focused-background = mf; + label-visible = "%icon%"; + label-urgent = "%icon%"; + label-occupied = "%icon%"; + + label-unfocused-padding = 1; + label-focused-padding = 1; + label-visible-padding = 1; + label-urgent-padding = 1; + label-occupied-padding = 1; + }; + + "module/clock" = { + type = "internal/date"; + interval = 10; + date = "%b %d, %H:%M"; + format = "