diff --git a/config/apps/alacritty.nix b/config/apps/alacritty.nix
deleted file mode 100644
index 5f664ac..0000000
--- a/config/apps/alacritty.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{...}:
-let
- gruvbox-dark = import ../data/gruvbox-dark.nix {};
-
-in {
- programs.alacritty = {
- enable = true;
- settings = {
- font.normal.family = "monospace";
- window = {
- dynamic_title = true;
- title = "Alacritty";
- };
-
- # gruvbox dark theme
- colors = {
- primary = {
- inherit (gruvbox-dark) background foreground;
- };
-
- inherit (gruvbox-dark) normal bright;
- };
-
- keyboard = {
- bindings = [
- {
- key = "Return";
- mods = "Shift|Control";
- action = "SpawnNewInstance";
- }
- ];
- };
- };
- };
-}
diff --git a/config/apps/default.nix b/config/apps/default.nix
deleted file mode 100644
index 89d7d74..0000000
--- a/config/apps/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{...}: {
- imports = [
- ./firefox.nix
- ./sway.nix
- ./waybar.nix
- ./alacritty.nix
- ./zsh.nix
- ./libinput.nix
- ./rofi.nix
- ];
-}
diff --git a/config/apps/firefox.nix b/config/apps/firefox.nix
deleted file mode 100644
index 282120b..0000000
--- a/config/apps/firefox.nix
+++ /dev/null
@@ -1,127 +0,0 @@
-{inputs, pkgs, ...}: let
- user = import ../data/user.nix {};
-in{
- programs.firefox = {
- enable = true;
-
- policies = {
- CaptivePortal = false;
- DisablePocket = true;
- DisableTelemetry = true;
- DisableFirefoxStudies = true;
- FirefoxHome = {
- Pocket = false;
- Snippets = false;
- };
- };
-
- profiles = {
- default = {
- isDefault = true;
-
- search = {
- default = "ddg";
- force = true;
- privateDefault = "ddg";
- };
-
- settings = {
- # disable warning when editing about:config
- "browser.aboutConfig.showWarning" = false;
- # webgpu
- "dom.webgpu.enabled" = true;
- "gfx.webrender.all" = true;
- "signon.rememberSignons" = false;
- # mozilla syncserver
- "identity.sync.tokenserver.uri" = "https://nirgendswo.com:8001/1.0/sync/1.5";
- "services.sync.username" = user.email;
- "browser.startup.page" = 3; # resume previous session
- "browser.startup.homepage" = "about:home";
- "browser.toolbars.bookmarks.visibility" = "never";
-
- # hardening
- "browser.newtabpage.enabled" = false;
- "browser.newtabpage.activity-stream.feeds.telemetry" = false;
- "browser.newtabpage.activity-stream.telemetry" = false;
- "browser.newtabpage.activity-stream.feeds.snippets" = false;
- "browser.newtabpage.activity-stream.feeds.section.topstories" = false;
- "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
- "browser.newtabpage.activity-stream.showSponsored" = false;
- "browser.newtabpage.activity-stream.feeds.discoverystreamfeed" = false;
- "browser.newtabpage.activity-stream.default.sites" = "";
- "browser.newtab.preload" = false;
- "geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
- "geo.provider.ms-windows-location" = false;
- "geo.provider.use_corelocation" = false;
- "geo.provider.use_gpsd" = false;
- "geo.provider.use_geoclue" = false;
- "browser.region.network.url" = "";
- "browser.region.update.enabled" = false;
- "intl.accept_languages" = "en-US,en-GB,en";
- "javascript.use_us_language_locale" = true;
- "app.update.auto" = false;
-
- "extensions.discover.enabled" = false;
- "extensions.htmlaboutaddons.recommendations.enabled" = false;
- "extenisons.getAddons.showPane" = false;
-
- "datareporting.healthreport.uploadEnabled" = false;
- "datareporting.policy.dataSubmissionEnabled" = false;
- "toolkit.telemetry.enabled" = false;
- "toolkit.telemetry.unified" = false;
- "toolkit.telemetry.server" = "data:,";
- "toolkit.telemetry.archive.enabled" = false;
- "toolkit.telemetry.newProfilePing.enabled" = false;
- "toolkit.telemetry.shutdownPingSender.enabled" = false;
- "toolkit.telemetry.updatePing.enabled" = false;
- "toolkit.telemetry.bhrPing.enabled" = false;
- "toolkit.telemetry.firstShutdownPing.enabled" = false;
- "toolkit.telemetry.coverage.opt-out" = true;
- "toolkit.coverage.opt-out" = true;
- "beacon.enabled" = false;
-
- "app.shield.optoutstudies.enabled" = false;
-
- "captivedetect.canonicalURL" = "";
- "network.captive-portal-service.enabled" = false;
- "network.connectivity-service.enabled" = false;
-
- "browser.safebrowsing.malware.enabled" = false;
- "browser.safebrowsing.phishing.enabled" = false;
- "browser.safebrowsing.blockedURIs.enabled" = false;
- "browser.safebrowsing.provider.google4.gethashURL" = "";
- "browser.safebrowsing.provider.google4.updateURL" = "";
- "browser.safebrowsing.provider.google4.dataSharingURL" = "";
- "browser.safebrowsing.provider.google.gethashURL" = "";
- "browser.safebrowsing.provider.google.updateURL" = "";
-
- "browser.safebrowsing.downloads.enabled" = false;
- "browser.safebrowsing.downloads.remote.enabled" = false;
- "browser.safebrowsing.downloads.remote.url" = "";
- "browser.safebrowsing.allowOverride" = false;
-
- "network.prefetch-next" = false;
- "network.dns.disablePrefetch" = true;
- "network.predictor.enabled" = false;
-
- "browser.fixup.alternate.enabled" = false;
- "browser.urlbar.trimURLs" = false;
-
- "browser.contentblocking.category" = "strict";
- "privacy.partition.serviceWorkers" = true;
- "privacy.partition.always_partition_third_party_non_cookie_storage" = true;
- "privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage" = true;
- "privacy.resistFingerprinting" = true;
- "privacy.resistFingerprinting.block_mozAddonManager" = true;
-
- "app.normandy.enabled" = false;
- "app.normandy.api_url" = "";
- };
-
- extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
- ublock-origin bitwarden rust-search-extension betterttv
- ];
- };
- };
- };
-}
diff --git a/config/apps/libinput.nix b/config/apps/libinput.nix
deleted file mode 100644
index 39c674d..0000000
--- a/config/apps/libinput.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{pkgs, config, ...}: {
- home.packages = with pkgs; [
- libinput
- libinput-gestures
- ];
-
- xdg.configFile."libinput-gestures.conf".text = ''
- gesture swipe left 4 swaymsg workspace next
- gesture swipe right 4 swaymsg workspace next
- gesture swipe down 4 swaylock-wrapper
- gesture pinch in 4 rofi -combi-modi window,drun,run,ssh,combi -show combi -show-icons
-'';
-}
diff --git a/config/apps/sway.nix b/config/apps/sway.nix
deleted file mode 100644
index 2d8a7c1..0000000
--- a/config/apps/sway.nix
+++ /dev/null
@@ -1,141 +0,0 @@
-{pkgs, lib, config, ...}:
-let
- base = import ./../options.nix;
-
- mod = "Mod4";
- left = "h";
- right = "l";
- up = "k";
- down = "j";
-
- launcher = "${pkgs.rofi}/bin/rofi -config ${config.xdg.configHome}/rofi/launcher.rasi -theme ${config.xdg.dataHome}/rofi/themes/launcher.rasi -show drun -show-icons";
-
-in {
- wayland = {
- windowManager = {
- sway = {
- enable = true;
- systemd.enable = true;
-
- config = {
- modifier = "${mod}";
-
- gaps = {
- inner = 8;
- };
-
- bars = [{
- command = "${pkgs.waybar}/bin/waybar";
- }];
-
- window = {
- border = 3;
- titlebar = false;
- };
-
- input = {
- "type:pointer" = {
- pointer_accel = "-1";
- };
-
- "type:keyboard" = {
- xkb_layout = "gb,dk";
- xkb_options =
- "caps:escape,grp:menu_toggle,grp:rctrl_toggle";
- repeat_delay = "250";
- repeat_rate = "25";
- };
-
- "type:touchpad" = {
- natural_scroll = "enabled";
- tap = "enabled";
- tap_button_map = "lrm";
- pointer_accel = "0";
- };
- };
-
- keybindings = with pkgs; {
- "Print" = "exec screenshot";
- "${mod}+Print" = "exec screenshot --area";
- "${mod}+Shift+Print" = "exec screenshot --current-window";
-
- "XF86AudioRaiseVolume" = "exec ${wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+";
- "XF86AudioLowerVolume" = "exec ${wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-";
- "XF86AudioMute" = "exec ${wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
- "XF86AudioMicMute" = "exec ${wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
-
- "XF86AudioPlay" = "mpc toggle";
- "XF86AudioNext" = "mpc next";
- "XF86AudioPrev" = "mpc prev";
-
- "XF86MonBrightnessUp" = "exec ${brightnessctl}/bin/brightnessctl set +10%";
- "XF86MonBrightnessDown" = "exec ${brightnessctl}/bin/brightnessctl set 10%-";
-
- "${mod}+Shift+Return" = "exec ${alacritty}/bin/alacritty";
- "${mod}+q" = "kill";
- "${mod}+p" = "exec ${launcher}";
- "${mod}+Shift+e" = "exec ${pkgs.emacs}/bin/emacsclient -c -a ''";
- "${mod}+Shift+b" = "exec ${pkgs.firefox}/bin/firefox";
- "${mod}+Shift+c" = "reload";
- "${mod}+Shift+q" = "exec ${pkgs.sway}/bin/swaymsg exit";
-
- "${mod}+${left}" = "focus left";
- "${mod}+${right}" = "focus right";
- "${mod}+${up}" = "focus up";
- "${mod}+${down}" = "focus down";
-
- "${mod}+Shift+${left}" = "move left";
- "${mod}+Shift+${right}" = "move right";
- "${mod}+Shift+${up}" = "move up";
- "${mod}+Shift+${down}" = "move down";
-
- "${mod}+Ctrl+${left}" = "move workspace to output left";
- "${mod}+Ctrl+${right}" = "move workspace to output right";
-
- "${mod}+b" = "splith";
- "${mod}+v" = "splitv";
-
- "${mod}+s" = "layout stacking";
- "${mod}+w" = "layout tabbed";
- "${mod}+e" = "layout toggle split";
-
- "${mod}+Shift+space" = "layout toggle floating";
- "${mod}+space" = "focus mode_toggle";
- "${mod}+Shift+f" = "fullscreen";
-
- } // lib.attrsets.mergeAttrsList (map
- (n: let workspace = toString n; in {
- "${mod}+${workspace}" = "workspace ${workspace}";
- "${mod}+Shift+${workspace}" = "move container to workspace ${workspace}";
- })
- [1 2 3 4 5 6 7 8 9 0]
- );
-
- colors = {
- focused = {
- background = "#A7C080";
- text = "#272E33";
- indicator = "#A7C080";
- border = "#A7C080";
- childBorder = "#A7C080";
- };
- unfocused = {
- background = "#9DA9A0";
- text = "#272E33";
- indicator = "#9DA9A0";
- border = "#9DA9A0";
- childBorder = "#9DA9A0";
- };
- urgent = {
- background = "#E67E80";
- text = "#272E33";
- indicator = "#E67E80";
- border = "#E67E80";
- childBorder = "#E67E80";
- };
- };
- };
- };
- };
- };
-}
diff --git a/config/apps/waybar.nix b/config/apps/waybar.nix
deleted file mode 100644
index 9b0160c..0000000
--- a/config/apps/waybar.nix
+++ /dev/null
@@ -1,233 +0,0 @@
-{lib, config, ...}:
-let
- theme = import ../data/theme.nix {inherit config; };
- utils = import ../utils.nix {inherit lib; };
-in let
- self = rec {
- # ModuleDesc has the shape {name, config?, background?, color?, style?}
- module-descs = [
- {
- name = "custom/left-most";
- background = theme.background;
- }
- {
- name = "pulseaudio";
- config = {
- format = "{volume}% {icon} {format_source}";
- format-bluetooth = "{volume}% {icon} {format_source}";
- format-muted = "{format_source}";
- format-source = "{volume}% ";
- format-source-muted = "";
- format-icons = {
- headphones = "";
- default = ["" "" ""];
- };
- on-click = "pavucontrol";
- };
- background = theme.normal.yellow;
- }
- {
- name = "network";
- config = {
- format-wifi = "{essid} {signalStrength}% {icon}";
- format-ethernet = "{ipaddr} ";
- format-disconnected = "Disconnected ";
- tooltip-format = ''Interface: {ifname}
-IP: {ipaddr}
-Speed: {bandwidthUpBytes} / {bandwidthDownBytes}
-Signal: {signalStrength}%
-SSID: {essid} {frequency}'';
- on-click = "iwgtk";
- format-icons = ["" "" "" "" ""];
- };
- background = theme.normal.green;
- }
- {
- name = "custom/vpn";
- config = {
- format = "{}";
- excape = true;
- interval = 30;
- exec = "nordvpn-rofi.sh --status-json";
- return-type = "json";
- on-click = "rofi -show vpn -modes 'vpn:nordvpn-rofi.sh'";
- };
- style = {
- connected.color = theme.normal.black;
- disconnected.color = theme.normal.yellow;
- };
- background = theme.extra.teal;}
- ]
- ++ (if (config.has_battery) then [{
- name = "battery";
- config = {
- states = {
- critical = 15;
- warning = 25;
- good = 80;
- full = 90;
- };
- interval = 30;
- format = "{capacity}% {icon}";
- format-charging = "{capacity}% ";
- format-plugged = "{capacity}% ";
- format-icons = ["" "" "" "" ""];
- };
- background = theme.extra.aqua;
- }] else [])
- ++ [
- {
- name = "cpu";
- config = {
- format = "{}% ";
- };
- background = theme.extra.brown;
- }
- {
- name = "memory";
- config = {
- format = "{}% ";
- };
- background = theme.extra.darkbrown;
- }
- {
- name = "temperature";
- config = {
- critical-threshold = 80;
- hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
- format = "{temperatureC}°C {icon}";
- format-icons = ["" "" ""];
- };
- background = theme.extra.darkerbrown;
- }
- {
- name = "clock";
- config = {
- format = "{:%H:%M} ";
- tooltip-format = "{calendar}";
- calendar = {
- mode = "month";
- weeks-pos = "left";
- on-scroll = 1;
- format = {
- months = "{}";
- days = "{}";
- weekdays = "{}";
- today = "{}";
- };
- on-scroll-up = "shift_up";
- on-scroll-down = "shift_down";
- };
- };
- background = theme.normal.black;
- }
- {name = "tray"; config = { spacing = 10; }; background = theme.background;}
- ];
-
- # default style for modules
- default-style = "padding-left: 8pt; padding-right: 8pt;";
-
- # ModuleDesc -> Module
- mkModule = desc: let
- background = desc.background or theme.background;
- color = desc.color or theme.foreground;
- config = desc.config or {};
- # style = module.style or "";
- style = default-style;
- style-name = builtins.replaceStrings ["/"] ["-"] desc.name;
- in {
- inherit (desc) name;
- setting = {
- } // config;
-
- style = "#${style-name} {" + default-style + ''background: ${background};color: ${color};'' + "}\n";
- };
-
- mkSpacer = idx: left: right: {
- name = "custom/arrow${toString idx}";
- setting = {
- format = "";
- tooltip = false;
- };
- style = "#custom-arrow${toString idx} {font-size: 14pt;background: ${left.background};color: ${right.background};}\n";
- };
-
- # modules interlaced with spacers
- # [ModuleDesc] -> [Module]
- mkSpacedModules = descs: with builtins;
- let
- len = length descs;
- in lib.lists.flatten
- (lib.lists.imap0
- (n: descs: let
- left = elemAt descs 0;
- right = elemAt descs 1;
- in if n == len then [
- (mkModule left)
- (mkSpacer n left right)
- (mkModule right)
- ] else [
- (mkModule left)
- (mkSpacer n left right)
- ])
- (utils.windows 2 descs)
- );
-
- # Module -> {"name" = setting}
- mkModuleConfig = {name, setting, ...}: lib.attrsets.optionalAttrs (!utils.isEmptySet setting) {
- "${name}" = setting;
- };
-
- # builds bar configuration with left, center, and right modules
- # right modules get spacers in between them.
- # {left: [ModuleDesc], center: [ModuleDesc], right: [ModuleDesc], config: {}} -> {config, style}
- mkBar = {left, center, right, config, ...}:
- let
- # Create modules from the descriptions
- right' = mkSpacedModules right;
- left' = map (module: mkModule module) left;
- center' = map (module: mkModule module) center;
- in let
- # Create lists of module names for the config
- modules-left = map (module: module.name) left';
- modules-center = map (module: module.name) center';
- modules-right = map (module: module.name) right';
- # Combine all modules into a single list
- modules = lib.lists.flatten [left' center' right'];
- in {
- config = lib.attrsets.mergeAttrsList (lib.lists.flatten [
- {
- inherit modules-left modules-center modules-right;
- }
- config
- (map mkModuleConfig modules)
- ]);
- style = lib.strings.concatStringsSep "\n" (map (module: module.style) modules);
- };
- };
-
- bar = self.mkBar {
- left = [ {name = "sway/workspaces";} {name = "sway/mode";} ];
- center = [ {name = "sway/window";} ];
- right = self.module-descs;
- config = {
- height = 25;
- spacing = 0;
- position = "top";
- };
- };
-in {
- programs.waybar = {
- enable = true;
-
- settings = {
- mainBar = bar.config;
- };
-
- style = ''
-* {border: none; border-radius: 0; min-height: 0; margin: 0; padding: 0; box-shadow: none; text-shadow: none;}
-#waybar { background: rgba(40, 40, 40, 0.3); color: #ffffff; font-family: "sans-serif"; font-size: 12pt; font-weight: 500; }
-''
- + bar.style;
- };
-}
diff --git a/config/btrfs-disko.nix b/config/btrfs-disko.nix
deleted file mode 100644
index 840923c..0000000
--- a/config/btrfs-disko.nix
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- disko.devices = {
- disk = {
- root = {
- type = "disk";
- device = "/dev/nvme0n1";
- content = {
- type = "gpt";
- partitions = {
- ESP = {
- label = "boot";
- name = "ESP";
- type = "EF00";
- size = "512M";
- content = {
- type = "filesystem";
- format = "vfat";
- mountpoint = "/boot";
- mountOptions = [ "umask=0077" ];
- };
- };
-
- luks = {
- size = "100%";
- label = "luks";
- content = {
- type = "luks";
- name = "cryptroot";
- extraOpenArgs = [
- "--allow-discards"
- "--perf-no_read_workqueue"
- "--perf-no_write_workqueue"
- ];
- # https://0pointer.net/blog/unlocking-luks2-volumes-with-tpm2-fido2-pkcs11-security-hardware-on-systemd-248.html
- settings = {crypttabExtraOpts = ["tpm2-device=auto" "token-timeout=10"];};
- content = {
- type = "btrfs";
- extraArgs = ["-L" "nixos" "-f"];
- subvolumes = {
- "@root" = {
- mountpoint = "/";
- mountOptions = ["subvol=@root" "compress=zstd" "noatime"];
- };
- "@home" = {
- mountpoint = "/home";
- mountOptions = ["subvol=@home" "compress=zstd" "noatime"];
- };
- "@nix" = {
- mountpoint = "/nix";
- mountOptions = ["subvol=@nix" "compress=zstd" "noatime"];
- };
- "@persist" = {
- mountpoint = "/persist";
- mountOptions = ["subvol=@persist" "compress=zstd" "noatime"];
- };
- "@log" = {
- mountpoint = "/var/log";
- mountOptions = ["subvol=@log" "compress=zstd" "noatime"];
- };
- "@snapshots" = {
- };
- "@swap" = {
- mountpoint = "/swap";
- swap.swapfile.size = "32G";
- };
- };
- };
- };
- };
- };
- };
- };
- };
- };
-
- fileSystems."/persist".neededForBoot = true;
- fileSystems."/var/log".neededForBoot = true;
-}
diff --git a/config/configuration.nix b/config/configuration.nix
deleted file mode 100644
index 83d71e6..0000000
--- a/config/configuration.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{ lib, ... }:
-{
- imports =
- [ # Include the results of the hardware scan.
- ./hardware-configuration.nix
- # inputs.home-manager.nixosModules.default
- ./nixos
- ./users/alice.nix
- ./variables.nix
- ./hosts/laptop.nix
- ];
-
- # to use zsh as a login shell, it has to be enabled globally.
- programs.zsh.enable = true;
-}
-
diff --git a/config/data/theme.nix b/config/data/theme.nix
deleted file mode 100644
index 2fc5a08..0000000
--- a/config/data/theme.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{config, ...}:
-let
- theme = if config.darkMode then import ./gruvbox-dark.nix {}
- else import ./gruvbox-light.nix {};
-in
-{
- inherit (theme) background foreground normal bright;
-
- extra = {
- red = "#bd574e";
- orange = "#eb8242";
- yellow = "#ede06b";
- green = "#9bb67c";
- teal = "#87a7b3";
- purple = "#ad6989";
- brown = "#ad8b73";
- darkbrown = "#85603f";
- darkerbrown = "#5e454b";
- cream = "#fefcf3";
- };
-}
diff --git a/config/data/user.nix b/config/data/user.nix
deleted file mode 100644
index 3b1c1f6..0000000
--- a/config/data/user.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{...}: {
- email = "janis@nirgendwo.xyz";
-}
diff --git a/config/disks.nix b/config/disks.nix
deleted file mode 100644
index a12465c..0000000
--- a/config/disks.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- disko.devices = {
- disk = {
- root = {
- device = "/dev/vda";
- type = "disk";
- content = {
- type = "gpt";
- partitions = {
- ESP = {
- label = "boot";
- name = "ESP";
- type = "EF00";
- size = "512M";
- content = {
- type = "filesystem";
- format = "vfat";
- mountpoint = "/boot";
- mountOptions = [ "umask=0077" ];
- };
- };
-
- root = {
- label = "root";
- size = "100%";
- content = {
- type = "filesystem";
- format = "ext4";
- mountpoint = "/";
- };
- };
- };
- };
- };
- };
- };
-}
diff --git a/config/flake.nix b/config/flake.nix
deleted file mode 100644
index e7c2da4..0000000
--- a/config/flake.nix
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- inputs = {
- # This is pointing to an unstable release.
- # If you prefer a stable release instead, you can this to the latest number shown here: https://nixos.org/download
- # i.e. nixos-24.11
- # Use `nix flake update` to update the flake to the latest revision of the chosen release channel.
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
- # nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
- home-manager = {
- url = "github:nix-community/home-manager";
- inputs.nixpkgs.follows = "nixpkgs"; # Use the same nixpkgs as the system
- };
- disko = {
- url = "github:nix-community/disko";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- nur.url = "github:nix-community/nur";
- # firefox-addons = {
- # url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
- # inputs.nixpkgs.follows = "nixpkgs"; # Use the same nixpkgs as the system
- # };
- };
- outputs = inputs @ { self, disko, nixpkgs, home-manager, ... }:
- let
- system = "x86_64-linux"; # Default system architecture
- in {
- # NOTE: 'nixos' is the default hostname
-
- nixosConfigurations = {
- nixos = nixpkgs.lib.nixosSystem {
- inherit system;
-
- modules = [
- ./configuration.nix
- home-manager.nixosModules.home-manager
- disko.nixosModules.disko
- ./btrfs-disko.nix
- {
- home-manager.useGlobalPkgs = true; # Use global packages in home-manager
- home-manager.useUserPackages = true; # Use user packages in home-manager
-
- home-manager.extraSpecialArgs = {
- inherit inputs;
- };
- }
- ];
-
- specialArgs = {
- inherit inputs home-manager;
- };
-
- pkgs = import nixpkgs {
- inherit system;
- config.allowUnfree = true; # Allow unfree packages globally
- overlays = [
- inputs.nur.overlays.default
- ];
- };
- };
- };
- };
-}
-
diff --git a/config/hardware-configuration.nix b/config/hardware-configuration.nix
deleted file mode 100644
index 70f66b2..0000000
--- a/config/hardware-configuration.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-# Do not modify this file! It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations. Please make changes
-# to /etc/nixos/configuration.nix instead.
-{ config, lib, pkgs, modulesPath, ... }:
-
-{
- imports =
- [ (modulesPath + "/profiles/qemu-guest.nix")
- ];
-
- boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ];
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ "kvm-intel" ];
- boot.extraModulePackages = [ ];
-
- fileSystems."/" =
- { device = "/dev/disk/by-uuid/723e4a6a-97b9-49ff-999f-806b12ea26b6";
- fsType = "ext4";
- };
-
- fileSystems."/boot" =
- { device = "/dev/disk/by-uuid/15E6-98FA";
- fsType = "vfat";
- options = [ "fmask=0077" "dmask=0077" ];
- };
-
- swapDevices = [ ];
-
- # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
- # (the default) this is the recommended approach. When using systemd-networkd it's
- # still possible to use this option, but it's recommended to use it in conjunction
- # with explicit per-interface declarations with `networking.interfaces..useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-}
diff --git a/config/hosts/common.nix b/config/hosts/common.nix
deleted file mode 100644
index e69de29..0000000
diff --git a/config/hosts/default.nix b/config/hosts/default.nix
deleted file mode 100644
index d854dcc..0000000
--- a/config/hosts/default.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{...}: {
- imports = [];
-}
diff --git a/config/hosts/laptop.nix b/config/hosts/laptop.nix
deleted file mode 100644
index dbb925f..0000000
--- a/config/hosts/laptop.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{config, ...}: {
- imports = [ ../variables.nix ];
- config.has_battery = true;
-}
diff --git a/config/hosts/vm.nix b/config/hosts/vm.nix
deleted file mode 100644
index dea1914..0000000
--- a/config/hosts/vm.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{...}: {
- imports = [ ../variables.nix ];
- # config.has_battery = true;
- config.vmGuest = true;
-}
diff --git a/config/nixos/default.nix b/config/nixos/default.nix
deleted file mode 100644
index 03c5cfb..0000000
--- a/config/nixos/default.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{...}: {
- imports = [
- ./hardware.nix
- ./system.nix
- ./plymouth.nix
- ./fonts.nix
- ./login.nix
- ];
-}
diff --git a/config/nixos/fonts.nix b/config/nixos/fonts.nix
deleted file mode 100644
index ace0f4b..0000000
--- a/config/nixos/fonts.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{pkgs, ...}: {
- fonts = {
- enableDefaultPackages = true;
- packages = with pkgs; [
- noto-fonts
- noto-fonts-cjk-sans
- noto-fonts-emoji
- liberation_ttf
- roboto
- roboto-mono
- twitter-color-emoji
- nerd-fonts.fira-code
- nerd-fonts.fira-mono
- unicode-emoji
- fira-sans
- font-awesome
- fira-mono
- fira-code
- material-icons
- source-sans
- source-code-pro
- pkgs.nur.repos.redpz.sf-mono
- ];
- fontconfig = {
- defaultFonts = {
- monospace = ["SF Mono" "Fira Mono" "Noto Mono"];
- serif = ["Liberation Serif" "Noto Serif"];
- sansSerif = ["Liberation Sans" "Noto Sans" "Roboto"];
- emoji = ["Twitter Color Emoji" "Noto Emoji"];
- };
- };
- };
-}
diff --git a/config/nixos/hardware.nix b/config/nixos/hardware.nix
deleted file mode 100644
index 14f49dc..0000000
--- a/config/nixos/hardware.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ config, pkgs, ...}:
-with pkgs;
-{
- hardware = {
- graphics = {
- enable = true; # Enable graphics support.
- extraPackages = [
- amdvlk
- intel-media-driver
- intel-vaapi-driver
- ];
- };
- cpu = {
- amd = {
- updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
- };
- };
- };
-}
diff --git a/config/nixos/login.nix b/config/nixos/login.nix
deleted file mode 100644
index 329ea59..0000000
--- a/config/nixos/login.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-# This file is part of the NixOS configuration for the login service.
-{pkgs, ...}: {
- environment.systemPackages = [ pkgs.sddm-chili-theme ];
- services = {
- displayManager = {
- enable = true;
- sddm = {
- enableHidpi = true;
- enable = true;
- theme = "chili";
- wayland.enable = true;
- };
- sessionPackages = with pkgs; [sway];
- };
- };
-}
diff --git a/config/nixos/plymouth.nix b/config/nixos/plymouth.nix
deleted file mode 100644
index 54e9f13..0000000
--- a/config/nixos/plymouth.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{pkgs, ...}: {
- boot = {
- plymouth = {
- enable = true;
- theme = "rings";
- themePackages = with pkgs; [
- (adi1090x-plymouth-themes.override {
- selected_themes = [ "rings" ];
- })
- ];
- };
-
- consoleLogLevel = 3;
- initrd.verbose = false;
- kernelParams = [
- "quiet"
- "splash"
- "boot.shell_on_fail"
- "udev.log_priority=3"
- "rd.systemd.show_status=auto"
- ];
-
- loader.timeout = 0;
- };
-}
diff --git a/config/nixos/system.nix b/config/nixos/system.nix
deleted file mode 100644
index 31acd03..0000000
--- a/config/nixos/system.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{config, pkgs, ...}:
-let
- base = import ../options.nix {};
-in {
- imports = [
- ../variables.nix
- ];
-
- system.stateVersion = "${base.stateVersion}";
-
- nix.settings.experimental-features = [
- "nix-command"
- "flakes"
- ];
-
- # Use the systemd-boot EFI boot loader.
- boot.loader.systemd-boot.enable = true;
- boot.loader.efi.canTouchEfiVariables = true;
-
- networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
-
- # Set your time zone.
- time.timeZone = "Europe/Amsterdam";
-
- i18n.defaultLocale = "en_GB.UTF-8";
- console = {
- font = "Lat2-Terminus16";
- keyMap = "uk";
- # useXkbConfig = true; # use xkb.options in tty.
- };
-
- services.qemuGuest.enable = config.vmGuest;
- services.spice-vdagentd.enable = config.vmGuest;
-
- security.rtkit.enable = true; # Enable real-time scheduling for audio applications.
-
- services = {
- pipewire = {
- enable = true;
- pulse.enable = true;
- alsa.enable = true;
- alsa.support32Bit = true; # Enable 32-bit support if needed.
- };
-
- openssh = {
- enable = true;
- settings = {
- PasswordAuthentication = true; # Enable password authentication.
- PermitRootLogin = "yes"; # Allow root login (not recommended for production).
- };
- };
-
- libinput.enable = true;
- };
-
- environment.systemPackages = with pkgs; [
- vim wget curl git emacs
- ];
-}
diff --git a/config/options.nix b/config/options.nix
deleted file mode 100644
index dc418c7..0000000
--- a/config/options.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{...}:
-let
- stateVersion = "25.05";
-in {
- inherit stateVersion;
-}
diff --git a/config/users/alice.nix b/config/users/alice.nix
deleted file mode 100644
index 3ccfd70..0000000
--- a/config/users/alice.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-inputs @ { pkgs, lib, ...}: let
- # NixOS version
- # Function to create the home-manager configuration for the account
- aliceUserFn = {pkgs, ...}: {
- imports = [
- ../apps
- ];
-
- home = {
- packages = with pkgs; [
- htop
- ]; # Default packages for the owner account.
- };
- };
-in {
- imports = [(lib.modules.importApply ./user.nix {
- user = {
- userName = "alice";
- defaultPassword = "password";
- shell = pkgs.zsh;
- packages = with pkgs; [
- tree
- vim
- wget
- curl
- git
- ];
- userModule = aliceUserFn;
- };
- })];
-}
diff --git a/config/users/user.nix b/config/users/user.nix
deleted file mode 100644
index 18844e0..0000000
--- a/config/users/user.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-# `user` has the following attributes:
-# - `userName`: The username for the user account.
-# - `defaultPassword`: The default password for the user account.
-# - `shell`: The shell for the user account.
-# - `packages`: List of packages to install for the user account.
-# - `userModule`: A module that provides additional configuration for the user account.
-
-{user}: inputs @ {lib, home-manager, pkgs, ...}:
-let
- username = user.userName or "alice";
-
- base = import ../options.nix {};
-in
-let
- homeDirectory = "/home/${username}";
-in {
- users.users.${username} = {
- shell = user.shell or pkgs.zsh; # Default shell for the user
-
- home = homeDirectory;
- createHome = true;
- group = "users"; # Default group
- isNormalUser = true;
- extraGroups = [ "wheel" ]; # Add to wheel group for sudo access
- } // lib.optionalAttrs (lib.hasAttr "defaultPassword" user) {
- initialPassword = user.defaultPassword;
- };
-
- home-manager.users.${username} = {...}: {
- imports = [ ../variables.nix user.userModule ];
-
- # programs.home-manager.enable = true;
-
- home = {
- inherit username;
- inherit homeDirectory;
- inherit (user) packages;
-
- stateVersion = "${base.stateVersion}";
-
- sessionVariables = {
- EDITOR = user.editor or "vim";
- };
- };
- };
-}
diff --git a/config/variables.nix b/config/variables.nix
deleted file mode 100644
index c47bfc3..0000000
--- a/config/variables.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{lib, ...}: {
- options = {
- has_battery = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = "Whether the system has a battery.";
- };
-
- vmGuest = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = "Enable VM guest services.";
- };
-
- darkMode = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = "Enable dark mode for the system.";
- };
- };
-}
diff --git a/new/configuration.nix b/configuration.nix
similarity index 85%
rename from new/configuration.nix
rename to configuration.nix
index 4b4bbe0..b3de030 100644
--- a/new/configuration.nix
+++ b/configuration.nix
@@ -3,5 +3,6 @@
# ./hardware-configuration.nix
./user
./system
+ ./programs
];
}
diff --git a/config/data/gruvbox-dark.nix b/data/gruvbox-dark.nix
similarity index 100%
rename from config/data/gruvbox-dark.nix
rename to data/gruvbox-dark.nix
diff --git a/config/data/gruvbox-light.nix b/data/gruvbox-light.nix
similarity index 100%
rename from config/data/gruvbox-light.nix
rename to data/gruvbox-light.nix
diff --git a/new/data/theme.nix b/data/theme.nix
similarity index 95%
rename from new/data/theme.nix
rename to data/theme.nix
index 2fc5a08..4710e84 100644
--- a/new/data/theme.nix
+++ b/data/theme.nix
@@ -17,5 +17,6 @@ in
darkbrown = "#85603f";
darkerbrown = "#5e454b";
cream = "#fefcf3";
+ aqua = "#689d6a";
};
}
diff --git a/new/data/user.nix b/data/user.nix
similarity index 100%
rename from new/data/user.nix
rename to data/user.nix
diff --git a/config/data/zsh-aliases.nix b/data/zsh-aliases.nix
similarity index 85%
rename from config/data/zsh-aliases.nix
rename to data/zsh-aliases.nix
index a21009c..d6b1ec8 100644
--- a/config/data/zsh-aliases.nix
+++ b/data/zsh-aliases.nix
@@ -7,6 +7,7 @@
q = "exit";
ssh = "TERM=xterm-256color ssh";
emacs = "emacs -nw"; # Use emacs in terminal mode.
+ ns = "nix-shell --run \"$(readlink /proc/$$/exe)\"";
# dotfiles
dotfiles = "git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME";
diff --git a/new/flake.nix b/flake.nix
similarity index 97%
rename from new/flake.nix
rename to flake.nix
index 6a008f8..5f0dfbf 100644
--- a/new/flake.nix
+++ b/flake.nix
@@ -21,6 +21,8 @@
modules = [
./configuration.nix
+ ./options.nix
+ ./pkgs
host
home-manager.nixosModules.home-manager
disko.nixosModules.disko
@@ -41,6 +43,7 @@
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true; # Allow unfree packages globally
+
overlays = [
inputs.nur.overlays.default
];
diff --git a/new/home/alacritty.nix b/home/alacritty.nix
similarity index 100%
rename from new/home/alacritty.nix
rename to home/alacritty.nix
diff --git a/new/home/default.nix b/home/default.nix
similarity index 89%
rename from new/home/default.nix
rename to home/default.nix
index 6106265..1899ea8 100644
--- a/new/home/default.nix
+++ b/home/default.nix
@@ -9,6 +9,7 @@ in {
./waybar.nix
./zsh.nix
./rofi.nix
+ ./libinput.nix
];
fonts.fontconfig.enable = true;
@@ -32,6 +33,9 @@ in {
tree
htop
pavucontrol
+ ripgrep
+
+ # nur.repos.LuisChDev.nordvpn
];
};
}
diff --git a/new/home/firefox.nix b/home/firefox.nix
similarity index 100%
rename from new/home/firefox.nix
rename to home/firefox.nix
diff --git a/new/home/libinput.nix b/home/libinput.nix
similarity index 63%
rename from new/home/libinput.nix
rename to home/libinput.nix
index 7285fd0..4dd21e8 100644
--- a/new/home/libinput.nix
+++ b/home/libinput.nix
@@ -11,9 +11,9 @@
];
xdg.configFile."libinput-gestures.conf".text = ''
- gesture swipe left 4 swaymsg workspace next
- gesture swipe right 4 swaymsg workspace next
+ gesture swipe left 4 ${pkgs.sway}/bin/swaymsg workspace prev
+ gesture swipe right 4 ${pkgs.sway}/bin/swaymsg workspace next
gesture swipe down 4 swaylock-wrapper
- gesture pinch in 4 rofi -combi-modi window,drun,run,ssh,combi -show combi -show-icons
+ gesture pinch in 4 ${pkgs.rofi}/bin/rofi -combi-modi window,drun,run,ssh,combi -show combi -show-icons
'';
}
diff --git a/config/apps/rofi.nix b/home/rofi.nix
similarity index 100%
rename from config/apps/rofi.nix
rename to home/rofi.nix
diff --git a/new/home/sway.nix b/home/sway.nix
similarity index 89%
rename from new/home/sway.nix
rename to home/sway.nix
index 46145ea..6052fea 100644
--- a/new/home/sway.nix
+++ b/home/sway.nix
@@ -1,4 +1,4 @@
-{pkgs, lib, config, ...}:
+{pkgs, lib, config, super-config, inputs, ...}:
let
mod = "Mod4";
left = "h";
@@ -11,6 +11,7 @@ let
in {
home.packages = with pkgs; [
brightnessctl
+ gammastep
wmctrl
wireplumber
alacritty
@@ -29,6 +30,21 @@ in {
config = {
modifier = "${mod}";
+ output = {
+ "*".scale = "${lib.strings.floatToString super-config.desktop_scale}";
+ };
+
+ startup = [
+ {
+ always = true;
+ command = "${pkgs.gammastep}/bin/gammastep -l 54:10 -t 6500k:4500k";
+ }
+ {
+ always = true;
+ command = "systemctl --user restart libinput-gestures.service";
+ }
+ ];
+
gaps = {
inner = 8;
};
@@ -100,6 +116,7 @@ in {
"${mod}+Ctrl+${left}" = "move workspace to output left";
"${mod}+Ctrl+${right}" = "move workspace to output right";
+ "${mod}+tab" = "workspace back_and_forth";
"${mod}+b" = "splith";
"${mod}+v" = "splitv";
diff --git a/new/home/waybar.nix b/home/waybar.nix
similarity index 91%
rename from new/home/waybar.nix
rename to home/waybar.nix
index c35c734..b16407d 100644
--- a/new/home/waybar.nix
+++ b/home/waybar.nix
@@ -1,4 +1,4 @@
-{pkgs, lib, config, ...}:
+{pkgs, lib, super-config, config, ...}:
let
theme = import ../data/theme.nix {inherit config; };
utils = import ../utils.nix {inherit lib; };
@@ -42,23 +42,24 @@ SSID: {essid} {frequency}'';
};
background = theme.normal.green;
}
- {
- name = "custom/vpn";
- config = {
- format = "{}";
- excape = true;
- interval = 30;
- exec = "nordvpn-rofi.sh --status-json";
- return-type = "json";
- on-click = "rofi -show vpn -modes 'vpn:nordvpn-rofi.sh'";
- };
- style = {
- connected.color = theme.normal.black;
- disconnected.color = theme.normal.yellow;
- };
- background = theme.extra.teal;}
+ # {
+ # name = "custom/vpn";
+ # config = {
+ # format = "{}";
+ # excape = true;
+ # interval = 30;
+ # exec = "${pkgs.nordvpn-rofi}/bin/nordvpn-rofi --status-json";
+ # return-type = "json";
+ # on-click = "rofi -show vpn -modes 'vpn:nordvpn-rofi'";
+ # };
+ # style = {
+ # connected.color = theme.normal.black;
+ # disconnected.color = theme.normal.yellow;
+ # };
+ # background = theme.extra.teal;
+ # }
]
- ++ (if (config.has_battery) then [{
+ ++ (if (super-config.has_battery) then [{
name = "battery";
config = {
states = {
diff --git a/config/apps/zsh.nix b/home/zsh.nix
similarity index 97%
rename from config/apps/zsh.nix
rename to home/zsh.nix
index 2a9cc9f..39dc5c2 100644
--- a/config/apps/zsh.nix
+++ b/home/zsh.nix
@@ -20,7 +20,7 @@ in {
path = "$HOME/.zsh_history";
};
- initExtra = ''
+ initContent = ''
prompt pure
zstyle :prompt:pure:path color cyan
zstyle :prompt:pure:prompt:error color red
diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix
new file mode 100644
index 0000000..48ac4ff
--- /dev/null
+++ b/hosts/laptop/default.nix
@@ -0,0 +1,25 @@
+{lib, config, modulesPath, ...}: {
+ imports = [
+ ./disks.nix
+ ../../options.nix
+ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ has_battery = true;
+ desktop_scale = 1.3;
+
+ boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-amd" ];
+ boot.extraModulePackages = [ ];
+
+ # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+ # (the default) this is the recommended approach. When using systemd-networkd it's
+ # still possible to use this option, but it's recommended to use it in conjunction
+ # with explicit per-interface declarations with `networking.interfaces..useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+}
diff --git a/new/hosts/laptop/disks.nix b/hosts/laptop/disks.nix
similarity index 100%
rename from new/hosts/laptop/disks.nix
rename to hosts/laptop/disks.nix
diff --git a/new/hosts/vm.nix b/hosts/vm.nix
similarity index 100%
rename from new/hosts/vm.nix
rename to hosts/vm.nix
diff --git a/new/data/gruvbox-dark.nix b/new/data/gruvbox-dark.nix
deleted file mode 100644
index a5bd438..0000000
--- a/new/data/gruvbox-dark.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{...}: {
- background = "#282828";
- foreground = "#ebdbb2";
-
- normal = {
- black = "#282828";
- red = "#cc241d";
- green = "#98971a";
- yellow = "#d79921";
- blue = "#458588";
- magenta = "#b16286";
- cyan = "#689d6a";
- white = "#a89984";
- };
-
- bright = {
- black = "#928374";
- red = "#fb4934";
- green = "#b8bb26";
- yellow = "#fabd2f";
- blue = "#83a598";
- magenta = "#d3869b";
- cyan = "#8ec07c";
- white = "#ebdbb2";
- };
-}
diff --git a/new/data/gruvbox-light.nix b/new/data/gruvbox-light.nix
deleted file mode 100644
index 9058095..0000000
--- a/new/data/gruvbox-light.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{...}: {
- background = "#fbf1c7";
- foreground = "#3c3836";
-
- normal = {
- black = "#fbf1c7";
- red = "#cc241d";
- green = "#98971a";
- yellow = "#d79921";
- blue = "#458588";
- magenta = "#b16286";
- cyan = "#689d6a";
- white = "#7c6f64";
- };
-
- bright = {
- black = "#928374";
- red = "#9d0006";
- green = "#79740e";
- yellow = "#b57614";
- blue = "#076678";
- magenta = "#8f3f71";
- cyan = "#427b58";
- white = "#3c3836";
- };
-}
diff --git a/new/data/zsh-aliases.nix b/new/data/zsh-aliases.nix
deleted file mode 100644
index a21009c..0000000
--- a/new/data/zsh-aliases.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{...}: {
- ll = "ls -l";
- la = "ls -la";
- git-tree = "git log --graph --oneline --all";
- c = "clear";
- cl = "clear; ls --color=auto";
- q = "exit";
- ssh = "TERM=xterm-256color ssh";
- emacs = "emacs -nw"; # Use emacs in terminal mode.
-
- # dotfiles
- dotfiles = "git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME";
-}
diff --git a/new/home/rofi.nix b/new/home/rofi.nix
deleted file mode 100644
index f54e60b..0000000
--- a/new/home/rofi.nix
+++ /dev/null
@@ -1,239 +0,0 @@
-{pkgs, config, ...}: let
- theme = import ../data/theme.nix { inherit config; };
-in {
- xdg.dataFile."rofi/themes/launcher.rasi".text = ''
-/**
- *
- * Author : Aditya Shakya (adi1090x)
- * Github : @adi1090x
- *
- * Rofi Theme File
- * Rofi Version: 1.7.3
- **/
-
-/*****----- Configuration -----*****/
-configuration {
- modi: "drun,run,filebrowser,window";
- show-icons: false;
- display-drun: "";
- display-run: "";
- display-filebrowser: "";
- display-window: "";
- drun-display-format: "{name}";
- window-format: "{w} · {c} · {t}";
-}
-
-/*****----- Global Properties -----*****/
-* {
- font: "JetBrains Mono Nerd Font 10";
- background: #101010;
- background-alt: #252525;
- foreground: #FFFFFF;
- selected: #505050;
- active: #909090;
- urgent: #707070;
-}
-
-/*****----- Main Window -----*****/
-window {
- /* properties for window widget */
- transparency: "real";
- location: center;
- anchor: center;
- fullscreen: false;
- width: 400px;
- x-offset: 0px;
- y-offset: 0px;
-
- /* properties for all widgets */
- enabled: true;
- border-radius: 20px;
- cursor: "default";
- background-color: @background;
-}
-
-/*****----- Main Box -----*****/
-mainbox {
- enabled: true;
- spacing: 0px;
- background-color: transparent;
- orientation: vertical;
- children: [ "inputbar", "listbox" ];
-}
-
-listbox {
- spacing: 20px;
- padding: 20px;
- background-color: transparent;
- orientation: vertical;
- children: [ "message", "listview", "mode-switcher" ];
-}
-
-/*****----- Inputbar -----*****/
-inputbar {
- enabled: true;
- spacing: 10px;
- padding: 100px 40px;
- background-color: transparent;
- background-image: url("~/.config/rofi/images/g.png", width);
- text-color: @foreground;
- orientation: horizontal;
- children: [ "textbox-prompt-colon", "entry" ];
-}
-textbox-prompt-colon {
- enabled: true;
- expand: false;
- str: "";
- padding: 12px 15px;
- border-radius: 100%;
- background-color: @background-alt;
- text-color: inherit;
-}
-entry {
- enabled: true;
- expand: true;
- padding: 12px 16px;
- border-radius: 100%;
- background-color: @background-alt;
- text-color: inherit;
- cursor: text;
- placeholder: "Search";
- placeholder-color: inherit;
-}
-
-/*****----- Mode Switcher -----*****/
-mode-switcher{
- enabled: true;
- spacing: 10px;
- background-color: transparent;
- text-color: @foreground;
-}
-button {
- padding: 12px;
- border-radius: 100%;
- background-color: @background-alt;
- text-color: inherit;
- cursor: pointer;
-}
-button selected {
- background-color: @selected;
- text-color: @foreground;
-}
-
-/*****----- Listview -----*****/
-listview {
- enabled: true;
- columns: 1;
- lines: 5;
- cycle: true;
- dynamic: true;
- scrollbar: false;
- layout: vertical;
- reverse: false;
- fixed-height: true;
- fixed-columns: true;
-
- spacing: 10px;
- background-color: transparent;
- text-color: @foreground;
- cursor: "default";
-}
-
-/*****----- Elements -----*****/
-element {
- enabled: true;
- spacing: 10px;
- padding: 12px;
- border-radius: 100%;
- background-color: transparent;
- text-color: @foreground;
- cursor: pointer;
-}
-element normal.normal {
- background-color: inherit;
- text-color: inherit;
-}
-element normal.urgent {
- background-color: @urgent;
- text-color: @foreground;
-}
-element normal.active {
- background-color: @active;
- text-color: @foreground;
-}
-element selected.normal {
- background-color: @selected;
- text-color: @foreground;
-}
-element selected.urgent {
- background-color: @urgent;
- text-color: @foreground;
-}
-element selected.active {
- background-color: @urgent;
- text-color: @foreground;
-}
-element-icon {
- background-color: transparent;
- text-color: inherit;
- size: 32px;
- cursor: inherit;
-}
-element-text {
- background-color: transparent;
- text-color: inherit;
- cursor: inherit;
- vertical-align: 0.5;
- horizontal-align: 0.0;
-}
-
-/*****----- Message -----*****/
-message {
- background-color: transparent;
-}
-textbox {
- padding: 12px;
- border-radius: 100%;
- background-color: @background-alt;
- text-color: @foreground;
- vertical-align: 0.5;
- horizontal-align: 0.0;
-}
-error-message {
- padding: 15px;
- border-radius: 0px;
- background-color: @background;
- text-color: @foreground;
-}
-'';
-
- xdg.configFile."rofi/launcher.rasi".text = ''
-configuration {
- modi: "drun,run,ssh,filebrowser,window";
- terminal: "${pkgs.alacritty}/bin/alacritty";
- show-icons: true;
- display-drun: "";
- display-run: "";
- display-ssh: "";
-
- drun-display-format: "{name}";
- run-display-format: "{name}";
- ssh-display-format: "{name}";
- combi-display-format: "{mode} {name}";
-
- combi-modi: "window,drun,run,filebrowser";
-
- kb-mode-previous: "Control+h";
- kb-mode-next: "Control+l";
- kb-mode-complete: "";
- kb-remove-char-back: "BackSpace,Shift+BackSpace";
-}
-'';
- programs.rofi = {
- enable = true;
- package = pkgs.rofi-wayland;
- terminal = "{pkgs.alacritty}/bin/alacritty";
-
- theme = "launcher.rasi";
- };
-}
diff --git a/new/home/zsh.nix b/new/home/zsh.nix
deleted file mode 100644
index 2a9cc9f..0000000
--- a/new/home/zsh.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{pkgs, ...}:
-let
- aliases = import ../data/zsh-aliases.nix {};
-in {
- home.packages = with pkgs; [ pure-prompt ];
- programs.zsh = {
- enable = true;
- enableCompletion = true;
- shellAliases = aliases;
-
- history = {
- size = 10000000;
- save = 10000000;
- findNoDups = true;
- saveNoDups = true;
- ignoreDups = true;
- share = true;
- extended = true;
- append = true;
- path = "$HOME/.zsh_history";
- };
-
- initExtra = ''
-prompt pure
-zstyle :prompt:pure:path color cyan
-zstyle :prompt:pure:prompt:error color red
-zstyle :prompt:pure:prompt:success color green
-bindkey -v
-autoload -Uz edit-command-line
-zle -N edit-command-line
-bindkey '^X^E' edit-command-line
-'';
- };
-
- programs.fzf = {
- enable = true;
- enableZshIntegration = true;
- };
-}
diff --git a/new/hosts/laptop/default.nix b/new/hosts/laptop/default.nix
deleted file mode 100644
index 59e58c0..0000000
--- a/new/hosts/laptop/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{modulesPath, ...}: {
- imports = [
- ./disks.nix
- (modulesPath + "/installer/scan/not-detected.nix")
- ];
-}
diff --git a/new/utils.nix b/new/utils.nix
deleted file mode 100644
index cd69dfc..0000000
--- a/new/utils.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{lib, ...}: rec {
- min = a: b: if a < b then a else b;
- max = a: b: if a > b then a else b;
- # build list of `len` lists of `n` elements of `xs`
- windows = with builtins; n: xs: let
- len = length xs;
- n' = min n len;
- # when len = n, there is still one window
- num-windows = max 0 (len - n' + 1);
- in
- genList
- # for i in 0..len
- (i: genList
- # for j in 0..n -> xs[i + j]
- (j: elemAt xs (i + j))
- n')
- num-windows;
-
- isEmptySet = set: with builtins; length (attrNames set) == 0;
-}
diff --git a/new/options.nix b/options.nix
similarity index 74%
rename from new/options.nix
rename to options.nix
index c47bfc3..9dd73dd 100644
--- a/new/options.nix
+++ b/options.nix
@@ -17,5 +17,11 @@
default = false;
description = "Enable dark mode for the system.";
};
+
+ desktop_scale = lib.mkOption {
+ type = lib.types.float;
+ default = 1.0;
+ description = "HiDpi scale factor for the window manager";
+ };
};
}
diff --git a/pkgs/default.nix b/pkgs/default.nix
new file mode 100644
index 0000000..d198624
--- /dev/null
+++ b/pkgs/default.nix
@@ -0,0 +1,5 @@
+{...}: {
+ nixpkgs.overlays = [
+ (import ./overlay.nix)
+];
+}
diff --git a/pkgs/nordvpn-rofi.nix b/pkgs/nordvpn-rofi.nix
new file mode 100644
index 0000000..9e5cf7d
--- /dev/null
+++ b/pkgs/nordvpn-rofi.nix
@@ -0,0 +1,181 @@
+{lib, makeWrapper, stdenv, writeShellScriptBin, jq, rofi, nordvpn, ...}: let
+nordvpn-rofi = writeShellScriptBin "nordvpn-rofi" ''
+#! /bin/env bash
+
+is_vpn_active() {
+ nordvpn status | grep -e "Status: Disconnected"
+}
+
+prettify() {
+ echo "$1"|sed 's/_/ /g'
+}
+
+main="$@"
+is_active=$(is_vpn_active)
+
+list_countries() {
+ nordvpn countries | tr -d '\r,-' | tr -s "[:blank:]" "\n" | sed '/^\s*$/d' | sort
+}
+
+list_cities() {
+ nordvpn cities "$1" | tr -d '\r,-' | tr -s "[:blank:]" "\n" | sed '/^\s*$/d' | sort
+}
+
+list_countries_with_cities() {
+ IFS=$'\n'
+ local countries
+ countries=( $(list_countries) )
+ local with_cities
+ for c in "''${countries[@]}"
+ do
+ with_cities+=($c)
+ with_cities+=($(list_cities $c))
+ done
+
+ echo $with_cities
+}
+
+print_country() {
+ echo -en "$(prettify $1)\0info\x1f$1\n"
+}
+
+# $1 -> city, $2 -> country
+print_city() {
+ echo -en "$(prettify $1)\0meta\x1f$2\x1finfo\x1f$1\n"
+}
+
+print_countries() {
+ local countries
+ IFS=$'\n'
+ countries=( $(list_countries) )
+
+ for cunt in "''${countries[@]}"
+ do
+ print_country $cunt
+ done
+}
+
+print_all() {
+ local countries
+ IFS=$'\n'
+ countries=( $(list_countries) )
+
+ for c in "''${countries[@]}"
+ do
+ print_country $c
+ local cities=( $(list_cities $c) )
+ for b in "''${cities[@]}"
+ do
+ print_city $b $c
+ done
+ done
+}
+
+init() {
+ echo -en "\0prompt\x1fNordVPN\n"
+
+ echo -en "Show Cities\0info\x1fCITIES\n"
+ echo -en "Disconnect\0info\x1fDISCONNECT\n"
+
+ print_countries
+}
+
+
+selected() {
+ local countries
+ IFS=$'\n'
+ countries=( $(list_countries) )
+
+
+ case $ROFI_INFO in
+ "CITIES")
+ echo -en "\0prompt\x1fNordVPN\n"
+
+ print_all
+ ;;
+ "DISCONNECT")
+ coproc( nordvpn disconnect > /dev/null 2>&1 || notify-send "NordVPN" "Failed to disconnect vpn." )
+ ;;
+ *)
+ echo -en "\0prompt\x1fConnecting to $@..\n"
+
+
+ coproc ( if nordvpn connect $ROFI_INFO > /dev/null 2>&1; then notify-send "NordVPN" "Connected to $ROFI_INFO"; else notify-send "NordVPN" "Failed to connect to $ROFI_INFO"; fi; pkill -SIGRTMIN+8 waybar )
+ exit 0
+ ;;
+ esac
+}
+
+input=$@
+
+case $input in
+ "--connected")
+ $( nordvpn status | sed -rne "s/Status: ([a-z,A-Z]*)/\1/p" | grep -qe "Connected" )
+ exit $?
+ ;;
+ "--status")
+ if $( nordvpn status | sed -rne "s/Status: ([a-z,A-Z]*)/\1/p" | grep -qe "Connected" );
+ then
+ echo "$( nordvpn status | sed -nr -e 's/Country: ([a-z,A-Z]*)/\1/p' -e 's/City: ([a-z,A-Z]*)/\1/p' | paste - - -d / )"
+ else
+ echo "Disconnected"
+ fi
+
+ exit 0
+ ;;
+ "--status-json")
+ vpn_status=$(nordvpn status | sed -Ee 's/.*(Status:.*)/\1/' | sed -n '/Status.*/,$p')
+ tooltip=$(echo "$vpn_status" | sed -Ee \
+ 's/Transfer: (.*) received, (.*) sent/Transer: \1 \2 /' | \
+ sed -Ee 's/(.*): (.*)/\1:<\/b> \2/')
+
+ (echo "$vpn_status" | sed -rne "s/Status: ([a-z,A-Z]*)/\1/p" | grep -qe "Connected")
+
+ if [[ $? == 0 ]];
+ then
+ text="$( echo "$vpn_status" | \
+ sed -nr -e 's/Country: ([a-z,A-Z]*)/\1/p' -e 's/City: ([a-z,A-Z]*)/\1/p' | \
+ paste - - -d / )"
+ class="connected"
+ jq -c -j -n --arg text "$text" --arg tooltip "$tooltip" \
+ --arg class "$class" '{$text, $tooltip, $class}'
+ else
+ text="Disconnected"
+ class="disconnected"
+ jq -c -j -n --arg text "$text" --arg tooltip "$tooltip" \
+ --arg class "$class" '{$text, $tooltip, $class}'
+ fi
+
+ exit 0
+ ;;
+esac
+
+case $ROFI_RETV in
+ 0) init ;;
+ 1) selected $input ;;
+esac
+'';
+in stdenv.mkDerivation {
+ pname = "nordvpn-rofi";
+ version = "1.0";
+ buildInputs = [ jq rofi nordvpn ];
+ nativeBuildInputs = [ makeWrapper ];
+
+ src = "${nordvpn-rofi}";
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp ${nordvpn-rofi}/bin/nordvpn-rofi $out/bin/nordvpn-rofi
+ chmod +x $out/bin/nordvpn-rofi
+ wrapProgram $out/bin/nordvpn-rofi \
+--prefix PATH : ${jq}/bin \
+--prefix PATH : ${rofi}/bin \
+--prefix PATH : ${nordvpn}/bin
+ '';
+
+ meta = {
+ description = "A utility script for NordVPN and Rofi";
+ license = lib.licenses.mit;
+ platforms = lib.platforms.linux;
+ };
+}
diff --git a/pkgs/nordvpn.nix b/pkgs/nordvpn.nix
new file mode 100644
index 0000000..94df44e
--- /dev/null
+++ b/pkgs/nordvpn.nix
@@ -0,0 +1,138 @@
+{
+ autoPatchelfHook,
+ buildFHSEnvChroot ? false,
+ buildFHSUserEnv ? false,
+ dpkg,
+ fetchurl,
+ lib,
+ stdenv,
+ sysctl,
+ iptables,
+ iproute2,
+ procps,
+ cacert,
+ libxml2,
+ libidn2,
+ libnl,
+ libcap,
+ libcap_ng,
+ zlib,
+ makeWrapper,
+ wireguard-tools,
+}:
+
+let
+ buildEnv = if builtins.typeOf buildFHSEnvChroot == "set" then buildFHSEnvChroot else buildFHSUserEnv;
+ pname = "nordvpn";
+ version = "4.0.0";
+ janis-bhm = {
+ name = "Janis B.";
+ email = "janis@nirgendwo.xyz";
+ github = "janis-bhm";
+ };
+
+ libxml2_13 = libxml2.overrideAttrs rec {
+ version = "2.13.8";
+ src = fetchurl {
+ url = "mirror://gnome/sources/libxml2/${lib.versions.majorMinor version}/libxml2-${version}.tar.xz";
+ hash = "sha256-J3KUyzMRmrcbK8gfL0Rem8lDW4k60VuyzSsOhZoO6Eo=";
+ };
+ };
+
+ nordvpnd = buildEnv {
+ name = "nordvpnd";
+ runScript = "nordvpnd";
+
+ extraBuildCommands = ''
+mkdir -p $out/usr/lib
+ln -s ${nordvpn}/lib/nordvpn $out/usr/lib/nordvpn
+'';
+
+ targetPkgs = pkgs: with pkgs; [
+ nordvpn
+ iproute2
+ iptables
+ procps
+ sysctl
+ makeWrapper
+ wireguard-tools
+ zlib
+ cacert
+ ];
+ };
+
+ nordvpn = stdenv.mkDerivation {
+ inherit pname version;
+
+ src = fetchurl {
+ url = "https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/n/nordvpn/nordvpn_${version}_amd64.deb";
+ hash = "sha256-elKREKiFrx2TgJPJl1ARtEebsv4PNG9fMq2mrV9xngs=";
+ };
+
+ buildInputs = [
+ libxml2_13
+ libidn2
+ libnl
+ libcap
+ libcap_ng
+ ];
+
+ nativeBuildInputs = [
+ dpkg
+ autoPatchelfHook
+ stdenv.cc.cc.lib
+ libxml2
+ ];
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ unpackPhase = ''
+ runHook preUnpack
+ dpkg --extract $src .
+ runHook postUnpack
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out
+ mv usr/sbin/nordvpnd usr/bin/nordvpnd
+ mv usr/* $out/
+ mv var/ $out/
+ runHook postInstall
+ '';
+
+ # wrap nordvpnd with iproute2, procps, sysctl, iptables path prefixes
+ # postInstall = ''
+ # wrapProgram $out/bin/nordvpnd \
+ # --prefix PATH : "${lib.makeBinPath [ iproute2 ]}" \
+ # --prefix PATH : "${lib.makeBinPath [ procps ]}" \
+ # --prefix PATH : "${lib.makeBinPath [ sysctl ]}" \
+ # --prefix PATH : "${lib.makeBinPath [ iptables ]}" '';
+
+ };
+in stdenv.mkDerivation {
+ inherit pname version;
+
+ dontConfigure = true;
+ dontBuild = true;
+ dontUnpack = true;
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/bin $out/share
+ ln -s ${nordvpn}/bin/nordvpn $out/bin
+ ln -s ${nordvpnd}/bin/nordvpnd $out/bin
+ ln -s ${nordvpn}/share* $out/share
+ ln -s ${nordvpn}/var $out
+ runHook postInstall
+ '';
+
+ meta = with lib; {
+ description = "CLI client for NordVPN";
+ homepage = "https://www.nordvpn.com";
+ license = licenses.unfree;
+ maintainers = with maintainers; [ janis-bhm ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/pkgs/nordvpn2.nix b/pkgs/nordvpn2.nix
new file mode 100644
index 0000000..ad7355b
--- /dev/null
+++ b/pkgs/nordvpn2.nix
@@ -0,0 +1,138 @@
+{ pkgs, lib, gcc, autoPatchelfHook, ... }:
+ let
+ patchedPkgs = pkgs.appendOverlays [
+ (final: prev: {
+ # Nordvpn uses a patched openvpn in order to perform xor obfuscation
+ # See https://github.com/NordSecurity/nordvpn-linux/blob/e614303aaaf1a64fde5bb1b4de1a7863b22428c4/ci/openvpn/check_dependencies.sh
+ openvpn = prev.openvpn.overrideAttrs (old: {
+ patches = (old.patches or [ ]) ++ [
+ (prev.fetchpatch {
+ url =
+ "https://github.com/Tunnelblick/Tunnelblick/raw/master/third_party/sources/openvpn/openvpn-${old.version}/patches/02-tunnelblick-openvpn_xorpatch-a.diff";
+ hash = "sha256-b9NiWETc0g2a7FNwrLaNrWx7gfCql7VTbewFu3QluFk=";
+ })
+ (prev.fetchpatch {
+ url =
+ "https://github.com/Tunnelblick/Tunnelblick/raw/master/third_party/sources/openvpn/openvpn-${old.version}/patches/03-tunnelblick-openvpn_xorpatch-b.diff";
+ hash = "sha256-X/SshB/8ItLFBx6TPhjBwyA97ra0iM2KgsGqGIy2s9I=";
+ })
+ (prev.fetchpatch {
+ url =
+ "https://github.com/Tunnelblick/Tunnelblick/raw/master/third_party/sources/openvpn/openvpn-${old.version}/patches/04-tunnelblick-openvpn_xorpatch-c.diff";
+ hash = "sha256-fw0CxJGIFEydIVRVouTlD1n275eQcbejUdhrU1JAx7g=";
+ })
+ (prev.fetchpatch {
+ url =
+ "https://github.com/Tunnelblick/Tunnelblick/raw/master/third_party/sources/openvpn/openvpn-${old.version}/patches/05-tunnelblick-openvpn_xorpatch-d.diff";
+ hash = "sha256-NLRtoRVz+4hQcElyz4elCAv9l1vp4Yb3/VJef+L/FZo=";
+ })
+ (prev.fetchpatch {
+ url =
+ "https://github.com/Tunnelblick/Tunnelblick/raw/master/third_party/sources/openvpn/openvpn-${old.version}/patches/06-tunnelblick-openvpn_xorpatch-e.diff";
+ hash = "sha256-mybdjCIT9b6ukbGWYvbr74fKtcncCtTvS5xSVf92T6Y=";
+ })
+ ];
+ });
+ })
+ ];
+ nordvpn = pkgs.buildGoModule rec {
+ pname = "nordvpn";
+ version = "3.19.0";
+
+ #src = ./.;
+ src = pkgs.fetchFromGitHub {
+ owner = "NordSecurity";
+ repo = "nordvpn-linux";
+ rev = "e614303aaaf1a64fde5bb1b4de1a7863b22428c4";
+ sha256 = "sha256-uIzG9QIVwax0Cop2VuDzy033efEBudFnGNj7osT/x2g";
+ };
+
+ nativeBuildInputs = with pkgs; [ pkg-config gcc ];
+
+ buildInputs = with pkgs; [ libxml2 gcc ];
+
+ vendorHash = "sha256-h5G5J/Sw0277pDzVXT6b3BX0KUbtyN8ujITfYp5PmgE";
+
+ ldflags = [
+ "-X main.Version=${version}"
+ "-X main.Environment=dev"
+ "-X main.Salt=development"
+ "-X main.Hash=${src.rev}"
+ ];
+
+ buildPhase = ''
+ runHook preBuild
+ echo "Building nordvpn CLI..."
+ export LDFLAGS="${builtins.concatStringsSep " " ldflags}"
+ go build -ldflags "$LDFLAGS" -o bin/nordvpn ./cmd/cli
+
+ echo "Building nordvpn user..."
+ go build -ldflags "$LDFLAGS" -o bin/norduserd ./cmd/norduser
+
+ # Fix missing include in a library preventing compilation
+ chmod +w vendor/github.com/jbowtie/gokogiri/xpath/
+ sed -i '6i#include ' vendor/github.com/jbowtie/gokogiri/xpath/expression.go
+
+ echo "Building nordvpn daemon..."
+ go build -ldflags "$LDFLAGS" -o bin/nordvpnd ./cmd/daemon
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p $out/lib/nordvpn/
+ mv bin/norduserd $out/lib/nordvpn/
+ ln -s ${patchedPkgs.openvpn}/bin/openvpn $out/lib/nordvpn/openvpn
+ ln -s ${pkgs.wireguard-tools}/bin/wg $out/lib/nordvpn/wg
+
+ # Nordvpn needs icons for the system tray
+ mkdir -p $out/share/icons/hicolor/scalable/apps
+ nordvpn_asset_prefix="nordvpn-" # hardcoded image prefix
+ cp assets/icon.svg $out/share/icons/hicolor/scalable/apps/nordvpn.svg # Does not follow convention
+ for file in assets/*.svg; do
+ cp "$file" "$out/share/icons/hicolor/scalable/apps/''${nordvpn_asset_prefix}$(basename "$file")"
+ done
+
+ mkdir -p $out/bin
+ cp bin/* $out/bin
+
+ runHook postInstall
+ '';
+
+ meta = with pkgs.lib; {
+ description = "NordVPN CLI and daemon application for Linux";
+ homepage = "https://github.com/nordsecurity/nordvpn-linux";
+ mainProgram = "nordvpn";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+ };
+ in pkgs.buildFHSEnv {
+ name = "nordvpnd";
+ targetPkgs = with pkgs;
+ pkgs: [
+ nordvpn
+ sysctl
+ iptables
+ iproute2
+ procps
+ cacert
+ libxml2
+ libidn2
+ zlib
+ wireguard-tools
+ patchedPkgs.openvpn
+ e2fsprogs # for chattr
+ ];
+
+ extraInstallCommands = ''
+ mkdir -p $out/bin/
+ printf "#!${pkgs.bash}/bin/bash\n${nordvpn}/bin/nordvpn \"\$@\"" > $out/bin/nordvpn
+ chmod +x $out/bin/nordvpn
+ '';
+
+ runScript = ''
+ ${nordvpn}/bin/nordvpnd
+ '';
+ }
diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix
new file mode 100644
index 0000000..b7503b2
--- /dev/null
+++ b/pkgs/overlay.nix
@@ -0,0 +1,4 @@
+final: prev: {
+ nordvpn = prev.callPackage ./nordvpn.nix {};
+ nordvpn-rofi = prev.callPackage ./nordvpn-rofi.nix {};
+}
diff --git a/programs/default.nix b/programs/default.nix
new file mode 100644
index 0000000..38dc5b7
--- /dev/null
+++ b/programs/default.nix
@@ -0,0 +1,5 @@
+{...}: {
+ imports = [
+ ./nordvpn.nix
+ ];
+}
diff --git a/programs/nordvpn.nix b/programs/nordvpn.nix
new file mode 100644
index 0000000..9cdecdf
--- /dev/null
+++ b/programs/nordvpn.nix
@@ -0,0 +1,52 @@
+{pkgs, ...}: let
+ # nordvpn = pkgs.callPackage ../pkgs/nordvpn.nix {};
+ # nordvpn-rofi = pkgs.callPackage ../pkgs/nordvpn-rofi.nix {};
+in {
+ environment.systemPackages = with pkgs; [
+ nordvpn
+ nordvpn-rofi
+ ];
+
+ users.groups.nordvpn = {};
+
+ # service definition
+ systemd.services.nordvpnd = {
+ enable = true;
+ description = "NordVPN Daemon";
+ wants = [ "nordvpnd.socket" ];
+ after = [ "network-pre.target" ];
+ wantedBy = [ "default.target" ];
+
+ serviceConfig = {
+ ExecStart = "${pkgs.nordvpn}/bin/nordvpnd";
+ NonBlocking = "true";
+ KillMode = "process";
+ Restart = "on-failure";
+ RestartSec = "5";
+ RuntimeDirectory = "nordvpn";
+ RuntimeDirectoryMode= "0750";
+ Group = "nordvpn";
+ # User = "root"; # uncomment if needed
+ };
+ };
+
+ # socket definition
+ systemd.sockets.nordvpnd = {
+ enable = true;
+ description = "NordVPN Daemon Socket";
+ partOf = [ "nordvpnd.service" ];
+ listenStreams = [ "/run/nordvpn/nordvpnd.sock" ];
+ socketConfig = {
+ NoDelay = "true";
+ SocketGroup = "nordvpn";
+ SocketMode = "0770";
+ DirectoryMode = "0750";
+ };
+ wantedBy = [ "sockets.target" ];
+ };
+
+# system.activationScripts."nordvpn-settings".text = ''
+# ${pkgs.nordvpn}/bin/nordvpn set dns 9.9.9.9 149.112.112.112 1.1.1.1
+# ${pkgs.nordvpn}/bin/nordvpn allowlist add subnet 192.168.0.0/16
+# '';
+}
diff --git a/programs/nordvpn2.nix b/programs/nordvpn2.nix
new file mode 100644
index 0000000..e628db2
--- /dev/null
+++ b/programs/nordvpn2.nix
@@ -0,0 +1,32 @@
+{config, lib, pkgs, ...}: {
+ systemd = {
+ services.nordvpn = {
+ description = "NordVPN daemon.";
+ serviceConfig = {
+ ExecStart = "${pkgs.nordvpn}/bin/nordvpnd";
+ ExecStartPre = ''
+ ${pkgs.bash}/bin/bash -c '\
+ mkdir -m 700 -p /var/lib/nordvpn; \
+ if [ -z "$(ls -A /var/lib/nordvpn)" ]; then \
+ cp -r ${pkgs.nordvpn}/var/lib/nordvpn/* /var/lib/nordvpn; \
+ fi'
+ '';
+ NonBlocking = true;
+ KillMode = "process";
+ Restart = "on-failure";
+ RestartSec = 5;
+ RuntimeDirectory = "nordvpn";
+ RuntimeDirectoryMode = "0750";
+ Group = "nordvpn";
+ };
+ wantedBy = [ "multi-user.target" ];
+ #after = [ "network-online.target" ];
+ #wants = [ "network-online.target" ];
+ };
+ services.NetworkManager-wait-online.enable = lib.mkForce false;
+ };
+
+ environment.systemPackages = with pkgs; [
+ nordvpn
+ ];
+}
diff --git a/new/system/default.nix b/system/default.nix
similarity index 86%
rename from new/system/default.nix
rename to system/default.nix
index 6a91d27..f8a3494 100644
--- a/new/system/default.nix
+++ b/system/default.nix
@@ -79,7 +79,9 @@
};
networking = {
- nameservers = ["1.1.1.1" "9.9.9.9"];
+ nameservers = [ "9.9.9.9#dns.quad9.net" "1.1.1.1#one.one.one.one" ];
+ # networkmanager.wifi.backend = "iwd";
+ # networkmanager.enable = true;
wireless.iwd = {
enable = true;
@@ -89,6 +91,7 @@
};
};
};
+ firewall.enable = false;
};
time.timeZone = "Europe/Amsterdam";
@@ -106,6 +109,15 @@
connman = {
enable = true;
wifi.backend = "iwd"; # Use iwd for Wi-Fi management.
+ extraFlags = [ "--nodnsproxy" ];
+ };
+
+ resolved = {
+ enable = true;
+ dnssec = "true";
+ domains = ["~."];
+ fallbackDns = [ "9.9.9.9#dns.quad9.net" "149.112.112.112#dns.quad9.net" "1.1.1.1#one.one.one.one" "1.0.0.1#one.one.one.one" ];
+ dnsovertls = "true";
};
thermald.enable = true;
diff --git a/new/user/default.nix b/user/default.nix
similarity index 73%
rename from new/user/default.nix
rename to user/default.nix
index 57d68f7..abfeb6f 100644
--- a/new/user/default.nix
+++ b/user/default.nix
@@ -1,16 +1,20 @@
-{pkgs, ...}:
+{config, pkgs, ...}:
let
user = import ../data/user.nix {};
in {
+ imports = [
+ ../options.nix
+ ];
+
users.users.${user.username} = {
shell = pkgs.zsh;
group = "users";
home = "/home/${user.username}";
createHome = true;
isNormalUser = true;
- extraGroups = [ "wheel" "input" ];
+ extraGroups = [ "wheel" "input" "nordvpn" "networkmanager" ];
};
-
+
programs.zsh.enable = true;
services = {
@@ -23,9 +27,13 @@ in {
};
};
};
+
};
home-manager.users.${user.username} = { ... }: {
imports = [ ../home ];
};
+ home-manager.extraSpecialArgs = {
+ super-config = config;
+ };
}
diff --git a/config/utils.nix b/utils.nix
similarity index 100%
rename from config/utils.nix
rename to utils.nix