From 09f38ef5bff195ed31ac101108ba6afa9b9d4f14 Mon Sep 17 00:00:00 2001 From: victor Date: Tue, 23 Aug 2022 22:31:19 +0200 Subject: [PATCH] dconf --- .envrc | 1 + .gitignore | 1 + flake.lock | 12 +- flake.nix | 12 +- nixos/common/default.nix | 1 + nixos/hosts/thalassa/null/configuration.nix | 19 +- nixos/hosts/thalassa/null/dconf.nix | 267 ++++++++++++++++++++ nixos/hosts/thalassa/null/home.nix | 58 ++++- util.nix | 6 +- 9 files changed, 364 insertions(+), 13 deletions(-) create mode 100644 .envrc create mode 100644 nixos/hosts/thalassa/null/dconf.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index b2be92b..d1da3a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ result +.direnv \ No newline at end of file diff --git a/flake.lock b/flake.lock index 827ae62..30b4a50 100644 --- a/flake.lock +++ b/flake.lock @@ -314,16 +314,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1661119194, - "narHash": "sha256-PDcdGfv/HIx1i23fiYnpmD1dV1HSzoPbl/utRRnFygg=", - "owner": "nixos", + "lastModified": 1661208473, + "narHash": "sha256-EcoSSCrhc/qkoACcbB1Q2zi1jiFvb93kb4SS1AbviFw=", + "owner": "NULLx76", "repo": "nixpkgs", - "rev": "5cccf8e32927aef22b074a4cc7520e024ca6a14a", + "rev": "a73f576bc51a194b6cf77580f84b60c610e0bbbe", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable-small", + "owner": "NULLx76", + "ref": "direnv-vscode-extension", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 2cc1513..30a4172 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,7 @@ # * https://git.voidcorp.nl/j00lz/nixos-configs/src/branch/main/flake.nix inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small"; + nixpkgs.url = "github:NULLx76/nixpkgs/direnv-vscode-extension"; colmena.url = "github:zhaofengli/colmena"; colmena.inputs.nixpkgs.follows = "nixpkgs"; @@ -49,7 +49,12 @@ # Script to apply local colmena deployments apply-local = pkgs.writeScriptBin "apply-local" '' #!${pkgs.stdenv.shell} - "${colmena.packages.x86_64-linux.colmena}"/bin/colmena apply-local --sudo --node "$(cat /proc/sys/kernel/hostname).$(cat /proc/sys/kernel/domainname)" + "${colmena.packages.x86_64-linux.colmena}"/bin/colmena apply-local --sudo + ''; + + dump-dconf = pkgs.writeScriptBin "dump-dconf" '' + #!${pkgs.stdenv.shell} + dconf dump / | dconf2nix > nixos/hosts/thalassa/null/dconf.nix ''; in { @@ -79,9 +84,10 @@ devShells.${system}.default = pkgs.mkShell { VAULT_ADDR = "http://vault.olympus:8200/"; # This only support bash so just execute zsh in bash as a workaround :/ - shellHook = "zsh; exit $?"; + # shellHook = "zsh; exit $?"; buildInputs = with pkgs; [ apply-local + dump-dconf colmena.packages.x86_64-linux.colmena fluxcd k9s diff --git a/nixos/common/default.nix b/nixos/common/default.nix index ea519ef..c1eb6a5 100644 --- a/nixos/common/default.nix +++ b/nixos/common/default.nix @@ -17,6 +17,7 @@ # Nix Settings nix = { package = pkgs.nixUnstable; + registry.nixpkgs.flake = inputs.nixpkgs; settings = { auto-optimise-store = true; trusted-users = [ "root" "victor" ]; diff --git a/nixos/hosts/thalassa/null/configuration.nix b/nixos/hosts/thalassa/null/configuration.nix index 131d0ee..d9d7d8f 100644 --- a/nixos/hosts/thalassa/null/configuration.nix +++ b/nixos/hosts/thalassa/null/configuration.nix @@ -26,6 +26,7 @@ in # Bootloader. boot.loader.systemd-boot.enable = true; + boot.loader.systemd-boot.configurationLimit = 6; boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.efiSysMountPoint = "/boot/efi"; boot.kernelPackages = pkgs.linuxPackages_latest; @@ -35,6 +36,16 @@ in networking.interfaces.wlp0s20f3.useDHCP = true; fileSystems."/".options = [ "compress=zstd" ]; + # Filesystem dedup + services.beesd.filesystems = { + root = { + spec = "LABEL=nixos"; + hashTableSizeMB = 256; + verbosity = "crit"; + extraOptions = [ "--loadavg-target" "2.0" ]; + }; + }; + # Select internationalisation properties. i18n.defaultLocale = "en_GB.utf8"; @@ -100,12 +111,13 @@ in }; environment.systemPackages = with pkgs; [ - gnome.gnome-tweaks pciutils nvidia-offload vim wireguard-tools + gnome.gnome-tweaks + gnome.dconf-editor gnomeExtensions.appindicator gnomeExtensions.wireguard-indicator ]; @@ -133,6 +145,11 @@ in ''; }; + nix.extraOptions = '' + keep-outputs = true + keep-derivations = true + ''; + # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave diff --git a/nixos/hosts/thalassa/null/dconf.nix b/nixos/hosts/thalassa/null/dconf.nix new file mode 100644 index 0000000..a63028f --- /dev/null +++ b/nixos/hosts/thalassa/null/dconf.nix @@ -0,0 +1,267 @@ +# Generated via dconf2nix: https://github.com/gvolpe/dconf2nix +{ lib, ... }: + +with lib.hm.gvariant; + +{ + dconf.settings = { + "apps/seahorse/listing" = { + keyrings-selected = [ "secret-service:///org/freedesktop/secrets/collection/login" ]; + }; + + "apps/seahorse/windows/key-manager" = { + height = 476; + width = 600; + }; + + "ca/desrt/dconf-editor" = { + saved-pathbar-path = "/org/gnome/settings-daemon/plugins/media-keys/custom0/binding"; + saved-view = "/org/gnome/settings-daemon/plugins/media-keys/custom0/binding"; + window-height = 500; + window-is-maximized = false; + window-width = 540; + }; + + "com/uploadedlobster/peek" = { + persist-window-geometry = mkTuple [ 953 214 ]; + recording-output-format = "webm"; + recording-start-delay = 1; + }; + + "es/atareao/wireguard-indicator" = { + darktheme = false; + nmcli = true; + services = [ "service1|wg-quick@wg0.service" "service2|wg-quick@wg1.service" ]; + sudo = false; + }; + + "org/gnome/Totem" = { + active-plugins = [ "vimeo" "variable-rate" "skipto" "screenshot" "screensaver" "save-file" "rotation" "recent" "movie-properties" "open-directory" "mpris" "autoload-subtitles" "apple-trailers" ]; + subtitle-encoding = "UTF-8"; + }; + + "org/gnome/calendar" = { + active-view = "month"; + window-maximized = true; + window-size = mkTuple [ 768 600 ]; + }; + + "org/gnome/control-center" = { + last-panel = "keyboard"; + window-state = mkTuple [ 980 640 ]; + }; + + "org/gnome/desktop/app-folders" = { + folder-children = [ "Utilities" "YaST" ]; + }; + + "org/gnome/desktop/app-folders/folders/Utilities" = { + apps = [ "gnome-abrt.desktop" "gnome-system-log.desktop" "nm-connection-editor.desktop" "org.gnome.baobab.desktop" "org.gnome.Connections.desktop" "org.gnome.DejaDup.desktop" "org.gnome.Dictionary.desktop" "org.gnome.DiskUtility.desktop" "org.gnome.eog.desktop" "org.gnome.Evince.desktop" "org.gnome.FileRoller.desktop" "org.gnome.fonts.desktop" "org.gnome.seahorse.Application.desktop" "org.gnome.tweaks.desktop" "org.gnome.Usage.desktop" "vinagre.desktop" ]; + categories = [ "X-GNOME-Utilities" ]; + name = "X-GNOME-Utilities.directory"; + translate = true; + }; + + "org/gnome/desktop/app-folders/folders/YaST" = { + categories = [ "X-SuSE-YaST" ]; + name = "suse-yast.directory"; + translate = true; + }; + + "org/gnome/desktop/input-sources" = { + sources = [ (mkTuple [ "xkb" "us+altgr-intl" ]) ]; + xkb-options = [ "terminate:ctrl_alt_bksp" "caps:swapescape" ]; + }; + + "org/gnome/desktop/interface" = { + color-scheme = "default"; + font-antialiasing = "grayscale"; + font-hinting = "slight"; + gtk-theme = "Arc-Darker"; + show-battery-percentage = true; + }; + + "org/gnome/desktop/notifications" = { + application-children = [ "gnome-power-panel" "code" "org-gnome-console" "codium" "discord" "org-gnome-totem" "com-uploadedlobster-peek" ]; + }; + + "org/gnome/desktop/notifications/application/code" = { + application-id = "code.desktop"; + }; + + "org/gnome/desktop/notifications/application/codium" = { + application-id = "codium.desktop"; + }; + + "org/gnome/desktop/notifications/application/com-uploadedlobster-peek" = { + application-id = "com.uploadedlobster.peek.desktop"; + }; + + "org/gnome/desktop/notifications/application/discord" = { + application-id = "discord.desktop"; + }; + + "org/gnome/desktop/notifications/application/gnome-power-panel" = { + application-id = "gnome-power-panel.desktop"; + }; + + "org/gnome/desktop/notifications/application/org-gnome-console" = { + application-id = "org.gnome.Console.desktop"; + }; + + "org/gnome/desktop/notifications/application/org-gnome-totem" = { + application-id = "org.gnome.Totem.desktop"; + }; + + "org/gnome/desktop/peripherals/touchpad" = { + tap-to-click = true; + two-finger-scrolling-enabled = true; + }; + + "org/gnome/desktop/search-providers" = { + sort-order = [ "org.gnome.Contacts.desktop" "org.gnome.Documents.desktop" "org.gnome.Nautilus.desktop" ]; + }; + + "org/gnome/desktop/session" = { + idle-delay = mkUint32 300; + }; + + "org/gnome/desktop/sound" = { + event-sounds = true; + theme-name = "__custom"; + }; + + "org/gnome/desktop/wm/keybindings" = { + move-to-workspace-1 = [ "exclam" ]; + move-to-workspace-2 = [ "at" ]; + move-to-workspace-3 = [ "numbersign" ]; + move-to-workspace-4 = [ "dollar" ]; + switch-to-workspace-1 = [ "1" ]; + switch-to-workspace-2 = [ "2" ]; + switch-to-workspace-3 = [ "3" ]; + switch-to-workspace-4 = [ "4" ]; + switch-to-workspace-5 = [ "5" ]; + switch-to-workspace-6 = [ "6" ]; + switch-to-workspace-7 = [ "7" ]; + switch-to-workspace-8 = [ "8" ]; + switch-to-workspace-9 = [ "9" ]; + }; + + "org/gnome/desktop/wm/preferences" = { + focus-mode = "sloppy"; + num-workspaces = 9; + }; + + "org/gnome/epiphany" = { + ask-for-default = false; + }; + + "org/gnome/epiphany/state" = { + is-maximized = false; + window-position = mkTuple [ (-1) (-1) ]; + window-size = mkTuple [ 1024 768 ]; + }; + + "org/gnome/evolution-data-server" = { + migrated = true; + network-monitor-gio-name = ""; + }; + + "org/gnome/file-roller/dialogs/extract" = { + recreate-folders = true; + skip-newer = false; + }; + + "org/gnome/file-roller/listing" = { + show-path = false; + }; + + "org/gnome/mutter" = { + attach-modal-dialogs = true; + dynamic-workspaces = false; + edge-tiling = true; + focus-change-on-pointer-rest = true; + workspaces-only-on-primary = false; + }; + + "org/gnome/nautilus/preferences" = { + default-folder-viewer = "icon-view"; + search-filter-time-type = "last_modified"; + }; + + "org/gnome/nautilus/window-state" = { + initial-size = mkTuple [ 890 550 ]; + maximized = false; + }; + + "org/gnome/nm-applet/eap/97297cfa-75d0-4653-84a7-67940e6e828a" = { + ignore-ca-cert = true; + ignore-phase2-ca-cert = false; + }; + + "org/gnome/settings-daemon/plugins/media-keys" = { + custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom0/" ]; + }; + + "org/gnome/settings-daemon/plugins/media-keys/custom0" = { + binding = "Return"; + command = "kgx"; + name = "Open Terminal"; + }; + + "org/gnome/settings-daemon/plugins/power" = { + power-button-action = "suspend"; + }; + + "org/gnome/shell" = { + disabled-extensions = [ "window-list@gnome-shell-extensions.gcampax.github.com" ]; + enabled-extensions = [ "wireguard-indicator@atareao.es" "appindicatorsupport@rgcjonas.gmail.com" ]; + favorite-apps = [ "firefox.desktop" "org.gnome.Nautilus.desktop" "org.gnome.Console.desktop" ]; + had-bluetooth-devices-setup = true; + welcome-dialog-last-shown-version = "42.4"; + }; + + "org/gnome/shell/app-switcher" = { + current-workspace-only = true; + }; + + "org/gnome/shell/keybindings" = { + switch-to-application-1 = []; + switch-to-application-2 = []; + switch-to-application-3 = []; + switch-to-application-4 = []; + }; + + "org/gnome/shell/world-clocks" = { + locations = "@av []"; + }; + + "org/gnome/tweaks" = { + show-extensions-notice = false; + }; + + "org/gtk/settings/file-chooser" = { + date-format = "regular"; + location-mode = "path-bar"; + show-hidden = false; + show-size-column = true; + show-type-column = true; + sidebar-width = 157; + sort-column = "name"; + sort-directories-first = false; + sort-order = "ascending"; + type-format = "category"; + window-position = mkTuple [ 0 32 ]; + window-size = mkTuple [ 1203 902 ]; + }; + + "system/locale" = { + region = "en_DK.UTF-8"; + }; + + "system/proxy" = { + mode = "none"; + }; + + }; +} diff --git a/nixos/hosts/thalassa/null/home.nix b/nixos/hosts/thalassa/null/home.nix index a1dc766..97bdc4d 100644 --- a/nixos/hosts/thalassa/null/home.nix +++ b/nixos/hosts/thalassa/null/home.nix @@ -1,8 +1,12 @@ -{ config, pkgs, ... }: { +{ config, pkgs, lib, ... }: { home.username = "victor"; home.homeDirectory = "/home/victor"; home.stateVersion = "22.05"; + imports = [ + ./dconf.nix + ]; + home.packages = with pkgs; [ discord rnix-lsp @@ -18,6 +22,8 @@ rust-analyzer steam-run texlive.combined.scheme-full + retroarchFull + peek ]; programs.git = { @@ -44,11 +50,20 @@ package = pkgs.vscode; extensions = with pkgs.vscode-extensions; [ matklad.rust-analyzer + mkhl.direnv jnoortheen.nix-ide james-yu.latex-workshop valentjn.vscode-ltex ]; }; + programs.direnv = { + enable = true; + nix-direnv = { + enable = true; + }; + }; + + programs.zsh.enable = true; gtk = { enable = true; @@ -59,4 +74,45 @@ }; services.syncthing.enable = true; + + # dconf.settings = + # let + # inherit (builtins) length head tail listToAttrs genList; + # range = a: b: if a < b then [ a ] ++ range (a + 1) b else [ ]; + # globalPath = "org/gnome/settings-daemon/plugins/media-keys"; + # path = "${globalPath}/custom-keybindings"; + # mkPath = id: "${globalPath}/custom${toString id}"; + # isEmpty = list: length list == 0; + # mkSettings = settings: + # let + # checkSettings = { name, command, binding }@this: this; + # aux = i: list: + # if isEmpty list then [ ] else + # let + # hd = head list; + # tl = tail list; + # name = mkPath i; + # in + # aux (i + 1) tl ++ [{ + # name = mkPath i; + # value = checkSettings hd; + # }]; + # settingsList = (aux 0 settings); + # in + # listToAttrs (settingsList ++ [ + # { + # name = globalPath; + # value = { + # custom-keybindings = genList (i: "/${mkPath i}/") (length settingsList); + # }; + # } + # ]); + # in + # mkSettings [ + # { + # name = "Open Terminal"; + # command = "kgx"; + # binding = "Return"; + # } + # ]; } diff --git a/util.nix b/util.nix index 20eba70..0fed2b3 100644 --- a/util.nix +++ b/util.nix @@ -31,8 +31,10 @@ rec { }; }; - mkColmenaHost = { ip ? null, hostname, tags, realm, type ? "lxc", ... }@host: { - "${hostname}.${realm}" = { + mkColmenaHost = { ip ? null, hostname, tags, realm, type ? "lxc", ... }@host: let + name = if realm == "thalassa" then hostname else "${hostname}.${realm}"; + in{ + "${name}" = { imports = resolve_imports host; networking = { hostName = hostname;