nord gnome dbus stuff

This commit is contained in:
Peder Bergebakken Sundt 2023-03-11 00:30:24 +01:00
parent dfd4e54fcc
commit 1abe47b0c2
25 changed files with 756 additions and 135 deletions

View File

@ -1,3 +1,3 @@
#!/usr/bin/env bash
eval "$(nix print-dev-env .#nomos-rebuild)"
eval "$(nix print-dev-env .#nomos-rebuild)"
echo Entered $(hostname --fqdn)

View File

@ -45,7 +45,9 @@
environment.shells = with pkgs; [ bash zsh ];
nix.settings.trusted-users = [ "root" ]; # default, but will stick around after a mergins with ./users
nix.settings.allowed-users = [ "*" ]; # default
#nix.settings.allowed-users = [ "@nixbld" "@builders" ]; # TODO: this
nix.settings.trusted-users = [ "root" "@wheel" ];
nix.settings.auto-optimise-store = true; # deduplicate with hardlinks, expensive. Alternative: nix-store --optimise
#nix.optimize.automatic = true; # periodic optimization
nix.gc.automatic = true;

View File

@ -102,6 +102,10 @@
});
devShells = forAllSystems (system: { # TODO: apply my overlays?
#default = nixpkgs.legacyPackages.${system}.mkShell {
# packages = with nixpkgs.legacyPackages.${system}; [
# ];
#};
nomos-rebuild = nixpkgs.legacyPackages.${system}.mkShell {
packages = with nixpkgs.legacyPackages.${system}; [
(writeScriptBin "nixos-rebuild" ''

View File

@ -5,36 +5,32 @@
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.efi.efiSysMountPoint = "/boot/efi";
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "pbsds";
# tmp: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229
systemd.services."getty@tty1".enable = false;
systemd.services."autovt@tty1".enable = false;
boot.kernelPackages = pkgs.linuxPackages_latest; # amdgpu audio fix when at 4k@60fps
imports = [
./hardware-configuration.nix
../../hardware/rocm.nix
../../hardware/opengl-intel.nix
../../users # home-manager
../../users/pbsds
../../hardware/rocm.nix
../../hardware/opengl-intel.nix
../../profiles/graphical/gnome # with gdm
../../profiles/graphical/pipewire
../../profiles/desktop/gnome # with gdm
../../profiles/desktop/sound/pulseaudio.nix
#../../profiles/desktop/sound/pipewire.nix
#../../profiles/desktop/sound/alsa.nix
../../profiles/nfs/reidun.nix
/** /
../../profiles/web
../../profiles/web/index
../../profiles/web/docs
../../profiles/web/docs/pdoc.nix
../../profiles/web/docs/python-docs.nix
../../profiles/web/docs/nixpkgs.nix
../../profiles/web/docs/linux-docs.nix
../../profiles/web/docs/yagcd.nix
/**/
#../../profiles/domeneshop-dyndns # TODO: olavtr is hardcoded...
#../../profiles/code-remote
#../../profiles/remote-builders #
#../../profiles/autossh-reverse-tunnels
#../../profiles/domeneshop-dyndns # handled by noximilien
];
@ -186,11 +182,10 @@
dejavu_fonts
];
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = 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

View File

@ -75,6 +75,7 @@
../../profiles/autossh-reverse-tunnels
#../../profiles/xrdp
];
services.domeneshop-updater.target = "olavtr.pbsds.net";
# TODO: remove? Move to where relevant=
nixpkgs.overlays = [

View File

@ -1,3 +1,4 @@
{ pkgs, ... }:
{
services.xserver.enable = true;
services.xserver.displayManager.gdm.enable = true;

View File

@ -0,0 +1,6 @@
{
sound.enable = true; # alsa sound?
#sound.mediaKeys.enable = true # only enable if headless
security.rtkit.enable = true; # optional
}

View File

@ -1,7 +1,8 @@
{
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
hardware.pulseaudio.enable = false; # gnome defaults it to true
#sound.enable = true # alsa? likely conflicts with pipewire
#sound.mediaKeys.enable = true # alsa? only enable if headless
services.pipewire.enable = true;
services.pipewire.alsa.enable = true;
services.pipewire.alsa.support32Bit = true;
@ -10,4 +11,6 @@
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#services.pipewire.media-session.enable = true;
security.rtkit.enable = true; # optional
}

View File

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
sound.enable = true; # alsa, needed?
#sound.mediaKeys.enable = true # only enable if headless
hardware.pulseaudio.enable = true;
hardware.pulseaudio.package = pkgs.pulseaudioFull; # optional
#hardware.pulseaudio.support32Bit = true;
nixpkgs.config.pulseaudio = true;
security.rtkit.enable = true; # optional
}

View File

@ -1,40 +1,55 @@
{ config, pkgs, lib, ... }:
let
cfg = config.services.domeneshop-updater;
in
{
# auto domain update
systemd.services.domeneshop-updater = {
description = "domene.shop domain updater";
after = [ "network-online.target" ]; # TODO: multi-user ?
wants = [ "network-online.target" ]; # TODO: multi-user ?
serviceConfig = let
prog = pkgs.writeShellApplication {
name = "domeneshop-dyndns-updater.sh";
runtimeInputs = with pkgs; [ curl yq ];
text = ''
test -s /var/lib/secrets/domeneshop.toml || {
>&2 echo "ERROR: /var/lib/secrets/domeneshop.toml not found!"
exit 1
}
DOMENESHOP_TOKEN="$( tomlq </var/lib/secrets/domeneshop.toml .secrets.DOMENESHOP_TOKEN --raw-output)"
DOMENESHOP_SECRET="$(tomlq </var/lib/secrets/domeneshop.toml .secrets.DOMENESHOP_SECRET --raw-output)"
curl https://"$DOMENESHOP_TOKEN":"$DOMENESHOP_SECRET"@api.domeneshop.no/v0/dyndns/update?hostname=olavtr.pbsds.net
'';
};
in {
User = "domeneshop";
Group = "domeneshop";
DynamicUser = true;
ExecStart = "${prog}/bin/domeneshop-dyndns-updater.sh";
PrivateTmp = true;
options = with lib; {
services.domeneshop-updater.target = mkOption {
type = types.string;
#default = config.networking.fqdn;
};
};
systemd.timers.domeneshop-updater = let interval = "5h"; in {
description = "Update domene.shop every ${interval}";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "5m";
OnUnitInactiveSec = interval;
Unit = "domeneshop-updater.service";
config = {
systemd.services.domeneshop-updater = {
description = "domene.shop dyndns domain updater";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = let
prog = pkgs.writeShellApplication {
name = "domeneshop-dyndns-updater.sh";
runtimeInputs = with pkgs; [ curl yq ];
text = ''
test -s /var/lib/secrets/domeneshop.toml || {
>&2 echo "ERROR: /var/lib/secrets/domeneshop.toml not found!"
exit 1
}
DOMENESHOP_TOKEN="$( tomlq </var/lib/secrets/domeneshop.toml .secrets.DOMENESHOP_TOKEN --raw-output)"
DOMENESHOP_SECRET="$(tomlq </var/lib/secrets/domeneshop.toml .secrets.DOMENESHOP_SECRET --raw-output)"
curl https://"$DOMENESHOP_TOKEN":"$DOMENESHOP_SECRET"@api.domeneshop.no/v0/dyndns/update?hostname=${cfg.target}
'';
};
in {
User = "domeneshop";
Group = "domeneshop";
DynamicUser = true;
ExecStart = "${prog}/bin/domeneshop-dyndns-updater.sh";
PrivateTmp = true;
};
};
systemd.timers.domeneshop-updater = let interval = "2h"; in {
description = "Update domene.shop every ${interval}";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "5m";
OnUnitInactiveSec = interval;
Unit = "domeneshop-updater.service";
};
};
};
}

View File

@ -9,12 +9,24 @@ let
# find 'publicKey' with `ssh-keyscan`
remotes = [
/** /
{
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
hostName = "nord.pbsds.net"; # TODO: port 24
sshUser = "pbsds";
maxJobs = 2; # 4 cores
#maxJobs = 1; # at least for big-parallel
speedFactor = 2;
supportedFeatures = [ "kvm" "big-parallel" "nixos-test" ];
#mandatoryFeatures = [ ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBSdIUtUfAxnVbPDmDDFdP2S3Wd3+CC8IfZAANJ76oh";
}
/**/
{
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
hostName = "bolle.pbsds.net";
sshUser = "pbsds";
maxJobs = 16;
maxJobs = 12; # 12 cores
#maxJobs = 1; # at least for big-parallel
speedFactor = 2;
supportedFeatures = [ "kvm" "big-parallel" "nixos-test" ];
@ -27,9 +39,9 @@ let
/**/
{
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
hostName = "noximilien.pbsds.net";
hostName = "noximilien.pbsds.net"; # TODO: port 23
sshUser = "pbsds";
maxJobs = 4;
maxJobs = 4; # 8 cores
#maxJobs = 1; # at least for big-parallel
speedFactor = 1;
supportedFeatures = [ "kvm" "big-parallel" "nixos-test" ];
@ -41,7 +53,7 @@ let
systems = ["x86_64-linux"];
hostName = "rocm.pbsds.net";
sshUser = "pbsds";
maxJobs = 8;
maxJobs = 8; # 16 cores
#maxJobs = 4;
#maxJobs = 1; # at least for big-parallel
speedFactor = 2;
@ -57,7 +69,7 @@ let
systems = ["x86_64-linux"];
hostName = "isvegg.pvv.ntnu.no";
sshUser = "pederbs";
maxJobs = 2;
maxJobs = 2; # 4 cores
speedFactor = 0;
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGurF7rdnrDP/VgIK2Tx38of+bX/QGCGL+alrWnZ1Ca5llGneMulUt1RB9xZzNLHiaWIE+HOP0i4spEaeZhilfU=";
}
@ -65,7 +77,7 @@ let
systems = ["x86_64-linux"];
hostName = "eirin.pvv.ntnu.no";
sshUser = "pederbs";
maxJobs = 2;
maxJobs = 2; # 8 cores
speedFactor = 0;
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBILGULKEzYe5kPorM0rWATv10qq6debfCuYUYqw3HWZm4Y5Pi7mVKcf8lKFNPc1DxT/dStfxxtHj/2fbezaxElk=";
}
@ -73,7 +85,7 @@ let
systems = ["x86_64-linux"];
hostName = "demiurgen.pvv.ntnu.no";
sshUser = "pederbs";
maxJobs = 2;
maxJobs = 2; # 8 cores
speedFactor = 0;
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKw92q3eB5HZbKJN3p+80MtirqcXPu01USE9LnoGYJuDvko1udjIy4UR0wAwELqgs+r7mJyuQPeXmOZKwjHP6tM=";
}

View File

@ -20,12 +20,24 @@
home-manager.users.pbsds = if config.services.xserver.desktopManager.gnome.enable
then import ./home/gnome.nix
else import ./home;
users.groups.pbsds.gid = 1001; # TODO: remove this, add a uid map to NFS instead
users.users.pbsds = {
isNormalUser = true;
uid = 1001; # TODO: uid mapping be done at nfs-mount level? That way we can enforce
description = "pbsds";
extraGroups = [ "pbsds" "networkmanager" "wheel" "nixbld" ]; # TODO: NAS stuff
extraGroups = [
"pbsds"
"networkmanager"
"audio"
"sound"
"video"
"input"
"tty"
"wheel"
"nixbld"
# TODO: NAS stuff
];
initialHashedPassword = "$6$yNgxTHcP1UYkNwuZ$1sBehnKgPjVnDe0tSV8kyfynWpfjDzuohZX6SoTrMnYFa3/aiMOtI6JppYevl.M6qYhBIT0XBvL6TqSSFWn8B/";
# TODO: fetch from github?

View File

@ -0,0 +1,56 @@
[general]
fontname=Monospace 14
selchars=-A-Za-z0-9,./?%&#:_
scrollback=5000
bgcolor=rgb(0,0,0)
fgcolor=rgb(211,215,207)
palette_color_0=rgb(0,0,0)
palette_color_1=rgb(205,0,0)
palette_color_2=rgb(78,154,6)
palette_color_3=rgb(196,160,0)
palette_color_4=rgb(52,101,164)
palette_color_5=rgb(117,80,123)
palette_color_6=rgb(6,152,154)
palette_color_7=rgb(211,215,207)
palette_color_8=rgb(85,87,83)
palette_color_9=rgb(239,41,41)
palette_color_10=rgb(138,226,52)
palette_color_11=rgb(252,233,79)
palette_color_12=rgb(114,159,207)
palette_color_13=rgb(173,127,168)
palette_color_14=rgb(52,226,226)
palette_color_15=rgb(238,238,236)
color_preset=Tango
disallowbold=false
cursorblinks=false
cursorunderline=false
audiblebell=true
tabpos=top
geometry_columns=80
geometry_rows=24
hidescrollbar=true
hidemenubar=true
hideclosebutton=false
hidepointer=false
disablef10=false
disablealt=false
disableconfirm=false
boldbright=false
visualbell=false
[shortcut]
new_window_accel=<Primary><Shift>n
new_tab_accel=<Primary><Shift>t
close_tab_accel=<Primary><Shift>w
close_window_accel=<Primary><Shift>q
copy_accel=<Primary><Shift>c
paste_accel=<Primary><Shift>v
name_tab_accel=<Primary><Shift>i
previous_tab_accel=<Primary>Page_Up
next_tab_accel=<Primary>Page_Down
move_tab_left_accel=<Primary><Shift>Page_Up
move_tab_right_accel=<Primary><Shift>Page_Down
zoom_in_accel=<Primary>plus
zoom_out_accel=<Primary>minus
zoom_reset_accel=<Primary>0

View File

@ -0,0 +1,36 @@
#1/usr/bin/env python
import configparser
import os
import urllib.parse
import shutil
import subprocess
import sys
c = configparser.RawConfigParser()
c.read(sys.argv[1])
def input(query):
if shutil.which("zenity"):
return subprocess.run(["zenity", "--forms", "--add-entry=" + query], capture_output=True).stdout.decode().strip()
#if shutil.which("xdialog"): TODO
assert 0
try:
url=c["InternetShortcut"]["URL"]
if not url.strip():
c["InternetShortcut"]["URL"] = input("Set URL")
with open(sys.argv[1], "w") as f:
c.write(f, space_around_delimiters=False)
exit(0)
if urllib.parse.urlparse(url).scheme not in ["http","https","ftp","ssh","zotero"]:
raise Exception("Invalid scheme in URI")
os.execv(shutil.which("xdg-open"), ["xdg-open", url])
assert 0
except Exception as e:
print(f"{e.__class__.__name__}: {e}",file=sys.stderr)
exit(3)

View File

@ -0,0 +1,102 @@
#!/usb/bin/env python3
#run with:
#gnome-terminal --hide-menubar --window-with-profile=manjaro -x python -i $HOME/.local/opt/python-interactive-imports.py
import numpy as np
from numpy import gcd, array, arange, linspace, meshgrid
from numpy import cos, pi, sin, exp, log, log10, sqrt
#from math import cos, pi, sin, exp, log, log10, sqrt, acos, asin, atan
from math import acos, asin, atan, factorial
from statistics import *
from pprint import pprint
from dis import dis
import os, sys
import functools
import typing
from functools import reduce
from pathlib import Path
from objexplore import explore
p = pprint
def plot(x, *args, label=[]):
import matplotlib.pyplot as plt
for i in args:
plt.plot(x[:len(i)], i)
plt.show()
def hist(x, bins=20):
import matplotlib.pyplot as plt
plt.hist(x, bins)
plt.show()
def scatter(x, *args):
import matplotlib.pyplot as plt
for i in args:
plt.plot(x[:len(i)], i, ".")
plt.show()
def imshow(image, cmap="gray"):
import matplotlib.pyplot as plt
plt.imshow(image.astype(np.float32), cmap=cmap)
plt.show()
def image(filepath=None, gray=False):
if not filepath:
import cv2
cam = cv2.VideoCapture(0)
s, im = cam.read() # captures image
cv2.destroyAllWindows()
im = im.astype(np.float64) / 256
if not gray:
return np.dstack((
im[:,:,2],
im[:,:,1],
im[:,:,0],
))
else:
return ( im[:,:,2] + im[:,:,1] + im[:,:,0]) / 3
else:
import matplotlib.image as mpimg
img=mpimg.imread('image_name.png')
def rad(degrees):
return degrees * pi / 180
def deg(radians):
return radians / pi * 180
def clip(data):
"xclip -sel clip"
import subprocess
p = subprocess.Popen(("xclip", "-sel", "clip"), stdin=subprocess.PIPE)
p.communicate(str(data).encode("utf-8"))
def prod(args):
return functools.reduce(lambda x, y: x*y, args)
def add(*args):
return sum(args)
def mul(*args):
return prod(args)
def history(n=None):
import readline
return "\n".join([
readline.get_history_item(i + 1)
for i in range(readline.get_current_history_length())
][-(n+1) if n is not None else 0:-1])
def integral(data, initial=0, step=None):
if step is None:
step = (data[-1] - data[0]) / len(data)
out = [initial]
for i in data:
out.append(out[-1] + i*step)
return out[1:]

View File

@ -0,0 +1,9 @@
#!/usb/bin/env python3
#run with:
#gnome-terminal --hide-menubar --window-with-profile=manjaro -x python -i $HOME/.local/opt/sympy-interactive-imports.py
from sympy import *
x, y, z, t = symbols('x y z t')
k, m, n = symbols('k m n', integer=True)
f, g, h = symbols('f g h', cls=Function)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

@ -3,75 +3,10 @@
{
imports = [
./default.nix
#./profiles/gnome.nix
./profiles/gnome
];
# TODO: dbus
dconf.settings = {
"org/gnome/shell" = {
disable-user-extensions = false;
enabled-extensions = [
"just-perfection-desktop@just-perfection"
];
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
enable-hot-corners = false;
clock-show-weekday = true;
};
"org/gnome/desktop/privacy" = {
report-technical-problems = "false";
};
"org/gnome/desktop/wm/preferences" = {
button-layout = ":minimize,close";
};
"org/gnome/settings-daemon/plugins/power" = {
sleep-interactive-ac-type = "nothing";
};
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
binding = "<Super>e";
command = "nautilus";
name = "open-file-browser";
};
"org/gnome/shell/extensions/just-perfection" = {
theme = true;
activities-button = false;
};
/** /
"org/gnome/shell/extensions/blur-my-shell" = {
brightness = 0.9;
};
"org/gnome/shell/extensions/blur-my-shell/panel" = {
customize = true;
sigma = 0;
};
"org/gnome/shell/extensions/blur-my-shell/overview" = { # Temporary = D2D Bug
customize = true;
sigma = 0;
};
/**/
};
home.packages = with pkgs; [
gnome.gnome-tweaks
lxterminal
gnomeExtensions.just-perfection
/** /
gnomeExtensions.blur-my-shell
gnomeExtensions.tray-icons-reloaded
gnomeExtensions.removable-drive-menu
gnomeExtensions.battery-indicator-upower
gnomeExtensions.workspace-indicator-2
gnomeExtensions.bluetooth-quick-connect
gnomeExtensions.forge
/**/
];
}

View File

@ -0,0 +1,137 @@
# Generated via dconf2nix: https://github.com/gvolpe/dconf2nix
{ lib, ... }:
with lib.hm.gvariant;
{
dconf.settings = {
"org/gnome/desktop/wm/keybindings" = {
close = [ "<Alt>F4" ];
maximize = [ "<Super>Up" ];
move-to-monitor-down = [];
move-to-monitor-up = [];
move-to-workspace-1 = [];
move-to-workspace-down = [ "<Super><Shift>Page_Down" "<Control><Shift><Alt>Down" ];
move-to-workspace-last = [];
move-to-workspace-left = [ "<Super><Shift><Alt>Left" "<Control><Shift><Alt>Left" ];
move-to-workspace-right = [ "<Super><Shift><Alt>Right" "<Control><Shift><Alt>Right" ];
move-to-workspace-up = [ "<Super><Shift>Page_Up" "<Control><Shift><Alt>Up" ];
panel-main-menu = [ "<Alt>F1" ];
switch-applications = [];
switch-applications-backward = [];
switch-to-workspace-1 = [];
switch-to-workspace-down = [ "<Super>Page_Down" "<Control><Alt>Down" ];
switch-to-workspace-last = [];
switch-to-workspace-left = [ "<Super><Alt>Left" "<Control><Alt>Left" ];
switch-to-workspace-right = [ "<Super><Alt>Right" "<Control><Alt>Right" ];
switch-to-workspace-up = [ "<Super>Page_Up" "<Control><Alt>Up" ];
switch-windows = [ "<Alt>Tab" ];
switch-windows-backward = [ "<Shift><Alt>Tab" ];
unmaximize = [ "<Super>Down" ];
};
"org/gnome/mutter/keybindings" = {
switch-monitor = [ "XF86Display" ];
toggle-tiled-left = [ "<Super>Left" ];
toggle-tiled-right = [ "<Super>Right" ];
};
"org/gnome/shell/keybindings" = {
screenshot = [ "Print" ];
show-screenshot-ui = [ "<Control>Print" ];
};
"org/gnome/settings-daemon/plugins/media-keys" = {
area-screenshot = [ "<Primary><Shift>Print" ];
area-screenshot-clip = [ "<Primary>Print" ];
custom-keybindings = [ "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom8/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom9/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom10/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom12/" ];
home = [ "<Super>e" ];
magnifier = [ "<Super>Escape" ];
magnifier-zoom-in = [ "<Super>plus" ];
magnifier-zoom-out = [ "<Super>minus" ];
next = [ "<Super>aring" ];
play = [ "<Alt>p" ];
previous = [ "<Super>o" ];
screenshot = [ "<Shift>Print" ];
screenshot-clip = [ "Print" ];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
binding = "<Primary><Alt>t";
command = "lxterminal";
name = "Open Terminal";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = {
binding = "";
command = "sh -c \"$HOME/.local/opt/center-window.sh\"";
name = "Window to Center";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom10" = {
binding = "";
command = "bash -c 'dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous'";
name = "spotify prev";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom11" = {
binding = "";
command = "sh -c \"$HOME/.local/opt/toggle_sticky.sh\"";
name = "Toggle stickyness";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom12" = {
binding = "<Primary><Shift>space";
command = "sh -c \"lxterminal -e python3 -i $HOME/.local/opt/sympy-interactive-imports.py\"";
name = "Open SymPy terminal";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2" = {
binding = "";
command = "sh -c \"$HOME/.local/opt/left-window.sh\"";
name = "Window to Left";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3" = {
binding = "";
command = "sh -c \"$HOME/.local/opt/right-window.sh\"";
name = "Window to Right";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4" = {
binding = "";
command = "sh -c \"$HOME/.local/opt/center-small-window.sh\"";
name = "Window to Center Small";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5" = {
binding = "<Primary><Alt>space";
command = "sh -c \"lxterminal -e `command -v ptpython || echo python3` -i $HOME/.local/opt/python-interactive-imports.py\"";
name = "Open Python Terminal";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6" = {
command = "sh -c \"$HOME/.local/opt/toggle_decoration.sh\"";
name = "Toggle window decorations";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7" = {
binding = "";
command = "sh -c \"$HOME/.local/opt/toggle_theme.sh\"";
name = "Toggle gtk theme";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom8" = {
binding = "";
command = "bash -c 'dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause'";
name = "spotify play";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom9" = {
binding = "";
command = "bash -c 'dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.next'";
name = "spotify next";
};
};
}

View File

@ -0,0 +1,97 @@
# Generated via dconf2nix: https://github.com/gvolpe/dconf2nix
{ lib, ... }:
with lib.hm.gvariant;
{
dconf.settings = {
"org/gnome/shell/extensions/vertical-overview" = {
override-dash = false;
scaling-workspace-background = false;
static-background = false;
};
"org/gnome/shell/extensions/big-avatar" = {
fontsize = 16;
horizontalmode = true;
picturesize = 48;
};
"org/gnome/shell/extensions/gtile" = {
autotile-1 = [ "" ];
autotile-10 = [ "" ];
autotile-2 = [ "" ];
autotile-3 = [ "" ];
autotile-4 = [ "" ];
autotile-5 = [ "" ];
autotile-6 = [ "" ];
autotile-7 = [ "" ];
autotile-8 = [ "" ];
autotile-9 = [ "" ];
autotile-main = [ "" ];
global-presets = false;
grid-sizes = "8x5";
insets-primary-bottom = 3;
insets-primary-left = 3;
insets-primary-right = 3;
insets-primary-top = 3;
insets-secondary-bottom = 0;
insets-secondary-left = 0;
insets-secondary-right = 0;
insets-secondary-top = 0;
max-timeout = 1600;
move-down-vi = [ "" ];
move-left-vi = [ "" ];
move-right-vi = [ "" ];
move-up-vi = [ "" ];
moveresize-enabled = false;
preset-resize-1 = [ "" ];
preset-resize-11 = [ "" ];
preset-resize-12 = [ "" ];
preset-resize-13 = [ "" ];
preset-resize-14 = [ "" ];
preset-resize-15 = [ "" ];
preset-resize-16 = [ "" ];
preset-resize-17 = [ "" ];
preset-resize-18 = [ "" ];
preset-resize-19 = [ "" ];
preset-resize-2 = [ "" ];
preset-resize-21 = [ "" ];
preset-resize-22 = [ "" ];
preset-resize-23 = [ "" ];
preset-resize-24 = [ "" ];
preset-resize-25 = [ "" ];
preset-resize-26 = [ "" ];
preset-resize-27 = [ "" ];
preset-resize-28 = [ "" ];
preset-resize-29 = [ "" ];
preset-resize-3 = [ "" ];
preset-resize-4 = [ "" ];
preset-resize-5 = [ "" ];
preset-resize-6 = [ "" ];
preset-resize-7 = [ "" ];
preset-resize-8 = [ "" ];
preset-resize-9 = [ "" ];
resize-down-vi = [ "" ];
resize-left-vi = [ "" ];
resize-right-vi = [ "" ];
resize-up-vi = [ "" ];
resize1 = "7x2 0:2 0:2, 2:5 0:2";
show-icon = false;
snap-to-neighbors = [ "" ];
window-margin = 4;
};
"org/gnome/shell/extensions/just-perfection" = {
activities-button = true;
app-menu = true;
dash = false;
dash-separator = true;
panel = true;
quick-settings = true;
top-panel-position = 1;
window-demands-attention-focus = true;
};
};
}

View File

@ -0,0 +1,60 @@
# Generated via dconf2nix: https://github.com/gvolpe/dconf2nix
{ lib, ... }:
with lib.hm.gvariant;
{
dconf.settings = {
"org/gnome/shell/extensions/user-theme" = {
name = "vimix-dark-laptop-ruby";
};
"org/gnome/desktop/interface" = {
clock-show-date = true;
clock-show-seconds = false;
clock-show-weekday = true;
color-scheme = "prefer-dark";
cursor-theme = "Adwaita";
document-font-name = "Sans 10";
enable-animations = true;
enable-hot-corners = false;
font-antialiasing = "grayscale";
font-hinting = "slight";
font-name = "Noto Sans 10";
gtk-theme = "Colloid-Dark";
icon-theme = "Flat-Remix-Blue-Dark";
locate-pointer = false;
monospace-font-name = "Hack 11";
show-battery-percentage = true;
text-scaling-factor = 1.0;
toolkit-accessibility = false;
};
"org/gnome/desktop/wm/preferences" = {
action-middle-click-titlebar = "none";
auto-raise = false;
button-layout = "appmenu:minimize,maximize,close";
focus-mode = "click";
focus-new-windows = "strict";
resize-with-right-button = false;
titlebar-font = "Cantarell Bold 11";
};
"org/gnome/shell/overrides" = {
dynamic-workspaces = true;
};
"org/gnome/tweaks" = {
show-extensions-notice = false;
};
"org/gnome/desktop/calendar" = {
show-weekdate = true;
};
"org/gnome/desktop/privacy" = {
disable-microphone = false;
};
};
}

View File

@ -0,0 +1,40 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p dconf2nix sd
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
dump() {
ROOT="$1"
shift
dconf dump "/$ROOT/" \
| sd '^\[([^/])' "[$ROOT/\$1" \
| sd '^\[/\]$' "[$ROOT]"
}
{
dump "org/gnome/desktop/wm/keybindings"
dump "org/gnome/mutter/keybindings"
dump "org/gnome/shell/keybindings"
dump "org/gnome/settings-daemon/plugins/media-keys"
} | dconf2nix > dconf-gnome-bindings.nix
{
#dump "org/gnome/shell"
dump "org/gnome/shell/extensions/vertical-overview"
dump "org/gnome/shell/extensions/big-avatar"
dump "org/gnome/shell/extensions/gtile"
dump "org/gnome/shell/extensions/just-perfection"
} | dconf2nix > dconf-gnome-extensions.nix
{
dump "org/gnome/shell/extensions/user-theme"
dump "org/gnome/desktop/interface" # features stuff already set by home-manager
dump "org/gnome/desktop/wm/preferences"
dump "org/gnome/shell/overrides"
dump "org/gnome/tweaks"
dump "org/gnome/desktop/calendar"
dump "org/gnome/desktop/privacy"
} | dconf2nix | sd --string-mode \
'"/org/gnome/desktop/interface" = {' \
'"/org/gnome/desktop/interface" = lib.mkDefault {' \
> dconf-gnome-theme.nix

View File

@ -0,0 +1,91 @@
# Handwritten!
{ pkgs, config, ... }:
{
home.file.".local/opt/open-microsoft-url-files.py".source = ../../files/opt/open-microsoft-url-files.py;
home.file.".local/opt/python-interactive-imports.py".source = ../../files/opt/python-interactive-imports.py;
home.file.".local/opt/sympy-interactive-imports.py".source = ../../files/opt/sympy-interactive-imports.py;
home.file.".config/lxterminal/lxterminal.conf".source = ../../files/lxterminal.conf;
imports = [
./dconf-gnome-bindings.nix
./dconf-gnome-extensions.nix
./dconf-gnome-theme.nix
];
home.packages = with pkgs; [
lxterminal
gnome.gnome-tweaks
pkgs.vimix-gtk-themes # shell theme
gnomeExtensions.big-avatar
gnomeExtensions.bluetooth-quick-connect
gnomeExtensions.gtile
gnomeExtensions.just-perfection
gnomeExtensions.keep-awake
gnomeExtensions.middle-click-to-close-in-overview
gnomeExtensions.vertical-overview
gnomeExtensions.appindicator
gnomeExtensions.removable-drive-menu
/* TODO:
gnomeExtensions.night-light-slider
gnomeExtensions.tray-icons-reloaded
gnomeExtensions.removable-drive-menu
gnomeExtensions.battery-indicator-upower
gnomeExtensions.workspace-indicator-2
gnomeExtensions.forge
*/
];
#dump "org/gnome/settings-daemon/plugins/power"
dconf.settings = {
"org/gnome/shell" = {
disable-user-extensions = false;
# remote-quick dconf dump /org/gnome/shell/ | grep ^enabled-extensions=
enabled-extensions = [
"bluetooth-quick-connect@bjarosze.gmail.com"
"gTile@vibou"
"just-perfection-desktop@just-perfection"
"KeepAwake@jepfa.de"
"middleclickclose@paolo.tranquilli.gmail.com"
"user-theme@gnome-shell-extensions.gcampax.github.com"
"vertical-overview@RensAlthuis.github.com"
"appindicatorsupport@rgcjonas.gmail.com"
"drive-menu@gnome-shell-extensions.gcampax.github.com"
];
};
# wallpaper
"org/gnome/desktop/background" = {
color-shading-type = "solid";
picture-options = "zoom";
picture-uri = "file://${../../files/wallpaper.jpg}";
picture-uri-dark = "file://${../../files/wallpaper.jpg}";
};
"org/gnome/desktop/screensaver" = {
idle-activation-enabled = false;
picture-uri = "file://${../../files/screensaver.jpg}";
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
enable-hot-corners = false;
clock-show-weekday = true;
};
#"org/gnome/desktop/wm/preferences" = {
# button-layout = ":minimize,close";
#};
"org/gnome/desktop/peripherals/touchpad" = {
disable-while-typing = false;
natural-scroll = false;
two-finger-scrolling-enabled = true;
};
"org/gnome/nautilus/preferences" = {
confirm-trash = true;
executable-text-activation = "display";
show-create-link = true;
sort-directories-first = true;
#recursive-search = "never";
#show-image-thumbnails = "always";
};
};
}

View File

@ -7,8 +7,4 @@
gtk.theme.package = pkgs.colloid-gtk-theme;
gtk.iconTheme.name = "Flat-Remix-Blue-Dark";
gtk.iconTheme.package = pkgs.flat-remix-icon-theme;
dconf.settings."org/gnome/desktop/background" = {
"picture-uri" = "file:///mnt/reidun/Images/Wallpapers/1575232313831.jpg";
"picture-uri-dark" = "file:///mnt/reidun/Images/Wallpapers/1575232313831.jpg";
};
}