Many changes

This commit is contained in:
Dakedres 2024-01-25 00:55:35 -07:00
commit f5f1a2b69c
56 changed files with 4123 additions and 0 deletions

View File

@ -0,0 +1,93 @@
# Kaolin-dark scheme by alternateved (http://github.com/alternateved)
# Inspired by (https://github.com/ogdenwebb/emacs-kaolin-themes)
{ config, ... }: {
custom.colors = {
base00 = "#18181B";
base01 = "#222225";
base02 = "#4B5254";
base03 = "#545C5E";
base04 = "#879193";
base05 = "#9ba5a7";
base06 = "#d0d0d4";
base07 = "#E4E4E8";
base08 = "#CD5C60";
base09 = "#DBAC66";
base0A = "#F2C866";
base0B = "#6FB593";
base0C = "#4D9391";
base0D = "#91B9C7";
base0E = "#845A84";
base0F = "#E36D5B";
};
custom.colors.kitty.enable = false;
programs.kitty.settings = with config.custom.colors; {
## name: Kaolin Dark
## author: Ogden Webb
## license: GNU GPLv3
## blurb: Dark jade theme inspired by Sierra.vim.
# The basic colors
foreground = base07;
background = "#000000";
# background = base00;
selection_foreground = base00;
selection_background = base07;
# Cursor colors
cursor = base07;
cursor_text_color = "#ffffff";
# kitty window border colors
active_border_color = base0C;
inactive_border_color = base02;
# Tab bar colors
active_tab_background = base07;
active_tab_foreground = base00;
inactive_tab_background = base04;
inactive_tab_foreground = base00;
# black
color0 = base02;
color8 = base04;
# red
color1 = base08;
color9 = base0F;
# green
color2 = base0B;
color10 = "#72CCBA";
# yellow
color3 = base09;
color11 = base0A;
# blue
color4 = base0D;
color12 = "#97B8DE";
# magenta
color5 = base0E;
color13 = "#8C629C";
# cyan
color6 = base0C;
color14 = "#5096AB";
# white
color7 = base07;
color15 = "#EFEFF1";
# other
color16 = base09;
color17 = base0F;
color18 = base01;
color19 = base02;
color20 = base04;
color21 = base06;
};
}

View File

@ -0,0 +1,20 @@
{ ... }: {
custom.colors = {
base00 = "#272822";
base01 = "#383830";
base02 = "#49483e";
base03 = "#75715e";
base04 = "#a59f85";
base05 = "#f8f8f2";
base06 = "#f5f4f1";
base07 = "#f9f8f5";
base08 = "#f92672";
base09 = "#fd971f";
base0A = "#f4bf75";
base0B = "#a6e22e";
base0C = "#a1efe4";
base0D = "#66d9ef";
base0E = "#ae81ff";
base0F = "#cc6633";
};
}

48
flake.lock generated Normal file
View File

@ -0,0 +1,48 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1705708511,
"narHash": "sha256-3f4BkRY70Fj7yvuo87c4QQPAjnt571g2wJ50jY7hnYc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ce4b88c465d928f4f8b75d0920f1788d5b65ca94",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1705496572,
"narHash": "sha256-rPIe9G5EBLXdBdn9ilGc0nq082lzQd0xGGe092R/5QE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "842d9d80cfd4560648c785f8a4e6f3b096790e19",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

36
flake.nix Normal file
View File

@ -0,0 +1,36 @@
{
description = "Nixos config flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
# newmpkgs = {
# url = "github:EpsilonKu/newm-atha";
# inputs.nixpkgs.follows = "nixpkgs";
# };
};
outputs = { self, nixpkgs, ... }@inputs:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
nixosConfigurations.default = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
modules = [
./host/configuration.nix
inputs.home-manager.nixosModules.default
];
};
};
}

103
home/default.nix Normal file
View File

@ -0,0 +1,103 @@
{ config, pkgs, inputs, ... }:
{
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "dakedres";
home.homeDirectory = "/home/dakedres";
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "23.11"; # Please read the comment before changing.
nixpkgs.config.allowUnfree = true;
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = with pkgs; [
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
# Util
neofetch
bitwarden
qutebrowser
discord
# Visual
imagemagick
kate
# Audio
ncspot
# Environment
fishPlugins.grc
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/dakedres/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = {
# EDITOR = "emacs";
};
programs.fish = {
enable = true;
interactiveShellInit = ''
set fish_greeting # Disable greeting
'';
shellAliases = {
ll = "ls -lh";
};
};
programs.kitty = {
enable = true;
shellIntegration.enableFishIntegration = true;
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

7
home/newm.nix Normal file
View File

@ -0,0 +1,7 @@
{ config, pkgs, inputs, ... }:
{
homeManager.home.file = {
"testFile".text = "test";
};
}

144
host/configuration.nix Normal file
View File

@ -0,0 +1,144 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, inputs, ... }:
let
username = "dakedres";
in {
custom.username = username;
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
inputs.home-manager.nixosModules.default
./user.nix
];
users.users.${username} = {
isNormalUser = true;
description = "Dakedres";
extraGroups = [ "networkmanager" "wheel" ];
shell = pkgs.fish;
};
# We live in a society
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# That's what it's called
networking.hostName = "vulpes";
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# I don't need no fig leaves
security.sudo.wheelNeedsPassword = false;
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "America/Boise";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
# Enable the X11 windowing system.
services.xserver.enable = true;
# Enable the KDE Plasma Desktop Environment.
services.xserver.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
# Configure keymap in X11
services.xserver = {
layout = "us";
xkb.options = "caps:swapescape,altwin:swap_alt_win";
};
# Enable CUPS to print documents.
services.printing.enable = true;
# Enable bluetooth
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
# Enable sound with pipewire.
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# 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)
#media-session.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
services.flatpak.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
git
wget
micro
openconnect
btop
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
# services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# 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. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
}

View File

@ -0,0 +1,39 @@
# 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 + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/81248e4c-95cf-4427-9df1-57f39b62a5a3";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/E50D-8471";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/25b9170e-c60a-49c1-929a-0fe6fc1e15ea"; }
];
# 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.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

112
host/home.nix Normal file
View File

@ -0,0 +1,112 @@
{ pkgs, lib, ... }:
let
terminal = "kitty";
# newm = inputs.newmpkgs.packages.${system}.newm-atha;
packages = [
# Utility
pkgs.bitwarden
pkgs.vimiv-qt
# Visual
pkgs.imagemagick
pkgs.kate
#Games
pkgs.prismlauncher-qt5
# Env
pkgs.eww-wayland
pkgs.socat
pkgs.jq
];
nonFreePackages = [
"discord"
];
in {
imports = [ ../colors/monokai-dark ];
custom.wallpaper = ../wallpapers/blip-blip-blip-blip.jpg;
home = {
sessionVariables = {
EDITOR = "kate";
BROWSER = "qutebrowser";
TERMINAL = "kitty";
TERM = "kitty";
FILEMANAGER = "kitty lf";
# Tell Electron apps it's wayland
NIXOS_OZONE_WL = 1;
};
sessionPath = [
"$HOME/.local/bin"
];
stateVersion = "23.11";
};
# Add packages
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) nonFreePackages;
home.packages =
map (name: pkgs.${name}) nonFreePackages
++ packages;
xdg.mimeApps = {
enable = true;
};
# Directories
xdg.userDirs = {
createDirectories = false;
download = "$HOME/downloads";
music = "$HOME/music";
};
# Openers
xdg.mimeApps.defaultApplications = {
"inode/directory" = [
# "lf.desktop"
"kitty-open.desktop"
];
};
# Standard programs
programs.bat = {
enable = true;
config = {
paging = "never";
};
};
# lf
programs.lf = {
enable = true;
commands = {
q = "quit"; # Why didn't they do this btw
};
keybindings = {
"<enter>" = "$$OPENER $f";
};
};
xdg.desktopEntries.lf = {
name = "LF";
genericName = "File browser";
exec = "lf %U";
terminal = true;
mimeType = [ "inode/directory" ];
};
# Take over my xsession
xsession.enable = true;
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

33
host/homeOptions.nix Normal file
View File

@ -0,0 +1,33 @@
{ lib, ... }: {
options.custom = {
wallpaper = lib.mkOption {
type = lib.types.path;
};
colors =
let
colorOption = lib.mkOption {
type = lib.types.str;
default = "#000000";
};
in
{
base00 = colorOption;
base01 = colorOption;
base02 = colorOption;
base03 = colorOption;
base04 = colorOption;
base05 = colorOption;
base06 = colorOption;
base07 = colorOption;
base08 = colorOption;
base09 = colorOption;
base0A = colorOption;
base0B = colorOption;
base0C = colorOption;
base0D = colorOption;
base0E = colorOption;
base0F = colorOption;
};
};
}

10
host/modules.nix Normal file
View File

@ -0,0 +1,10 @@
[
../modules/fish
../modules/qutebrowser
../modules/kitty
../modules/ncspot
../modules/bspwm
../modules/blueman
]

176
host/swhkdrc Normal file
View File

@ -0,0 +1,176 @@
#
# wm independent hotkeys
#
# Open kitty
alt + Return
kitty
# Open floating kitty
alt + shift + Return
bsp-float kitty
# launch program
alt + @space
rofi -show run
# launch program as root
alt + shift + @space
rofi-ask rofi -show drun -run-command "sudo -A {cmd}"
# make sxhkd reload its configuration files:
alt + Escape
pkill -USR1 -x sxhkd; notify-send 'Key daemon reloaded'
# Start a qutebrowser search
alt + o
qutesearch
# Show keybinds
alt + slash
sxhkd-help
# Show clipmenu
alt + v
rofi -modi "clipboard:greenclip print" -show clipboard -run-command '{cmd}'
alt + shift + v
greenclip clear
#
# bspwm hotkeys
#
# quit/restart bspwm
alt + shift + {q,r}
bspc {quit,wm -r}
# close and kill
alt + {_,shift + }w
bspc node -{c,k}
alt + q
bspc node -c
# alternate between the tiled and monocle layout
alt + m
bspc desktop -l next
# send the newest marked node to the newest preselected node
alt + y
bspc node newest.marked.local -n newest.!automatic.local
# swap the current node and the biggest window
alt + g
bspc node -s biggest.window
# Reveal hidden kitty (scratchpad)
alt + super + Return
bsp-toggle-visibility KittyScratch "kitty --class KittyScratch"
# flameshot
alt + Print
flameshot gui
#
# state/flags
#
# set the window state
alt + {z,shift + z,x,f}
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
# set the node flags
alt + ctrl + {m,x,y,z}
bspc node -g {marked,locked,sticky,private}
#
# focus/swap
#
# focus the node in the given direction
alt + {h,j,k,l,Left,Down,Up,Right}
bspc node -{f} {west,south,north,east,west,south,north,east}
# focus the node for the given path jump
alt + {p,b,comma,period}
bspc node -f @{parent,brother,first,second}
# focus the next/previous window in the current desktop
alt + {a,d}
bspc node -f {next,prev}.local.!hidden.window
# focus the next/previous desktop in the current monitor
alt + bracket{left,right}
bspc desktop -f {prev,next}.local
# focus the last node/desktop
alt + {grave,Tab}
bspc {node,desktop} -f last
# focus the older or newer node in the focus history
alt + {o,i}
bspc wm -h off; \
bspc node {older,newer} -f; \
bspc wm -h on
# focus or send to the given desktop
alt + {_,shift + }{1-9,0}
bspc {desktop -f,node -d} '^{1-9,10}'
#
# preselect
#
# preselect the direction
alt + ctrl + shift {h,j,k,l,Left,Down,Up,Right}
bspc node -p {west,south,north,east,west,south,north,east}
# preselect the ratio
alt + ctrl + {1-9}
bspc node -o 0.{1-9}
# cancel the preselection for the focused node
alt + ctrl + space
bspc node -p cancel
# cancel the preselection for the focused desktop
alt + ctrl + shift + space
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
#
# move/resize
#
# Resize a window by moving one of its side outward/inward
alt + s ; {h,j,k,l,Left,Down,Up,Right}
STEP=20; SELECTION={1,2,3,4,1,2,3,4}; \
bspc node -z $(echo "left -$STEP 0,bottom 0 $STEP,top 0 -$STEP,right $STEP 0" | cut -d',' -f$SELECTION) || \
bspc node -z $(echo "right -$STEP 0,top 0 $STEP,bottom 0 -$STEP,left $STEP 0" | cut -d',' -f$SELECTION)
# move a floating window
alt + {h,j,k,l}
bspc node -v {-30 0,0 20,0 -30,20 0}
# move a not-floating window
alt + shift + {h,j,k,l,Left,Down,Up,Right}
bsp-smove {west,south,north,east,west,south,north,east}
#
# tabs
#
# move in/out of tabbed container
alt + ctrl + {h,j,k,l,Left,Down,Up,Right}
tabc-smart-detach {west,south,north,east,west,south,north,east}
# tab/untab window
alt + t
id=$(bspc query -N -n); \
[[ "$(tabc printclass $id)" == "tabbed" ]] \
&& tabc detach $id \
|| tabc create $id
# toggle autoattach in tabbed container
alt + shift + t
tabc autoattach $(bspc query -N -n)

41
host/user.nix Normal file
View File

@ -0,0 +1,41 @@
{ config, lib, inputs, ... }:
let
modules = import ./modules.nix;
username = config.custom.username;
in {
options.custom = {
username = lib.mkOption {
type = lib.types.str;
default = "dakedres";
};
};
config.home-manager.users."${username}" = {
imports =
(builtins.filter
(path: builtins.pathExists path)
(builtins.map
(path: path + "/home.nix")
modules
)
) ++ [
./home.nix
./homeOptions.nix
];
config.home = {
username = username;
homeDirectory = "/home/${username}";
};
};
imports =
(builtins.filter
(path: builtins.pathExists path)
(builtins.map
(path: path + "/default.nix")
modules
)
);
}

View File

@ -0,0 +1,3 @@
{ ... }: {
services.blueman.enable = true;
}

3
modules/blueman/home.nix Normal file
View File

@ -0,0 +1,3 @@
{ ... }: {
services.blueman-applet.enable = true;
}

View File

@ -0,0 +1,3 @@
{ ... }: {
services.xserver.windowManager.bspwm.enable = true;
}

77
modules/bspwm/home.nix Normal file
View File

@ -0,0 +1,77 @@
{ pkgs, lib, config, ... }: {
imports = [
../qutesearch/home.nix
../tint2/home.nix
../rofi/home.nix
];
home.packages = [
pkgs.feh
pkgs.flameshot
];
services.network-manager-applet.enable = true;
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-kde
];
configPackages = [
pkgs.xdg-desktop-portal-kde
];
};
# handled by home manager
# home.sessionVariables = {
# # Tell java it's in no-reparenting land
# "_JAVA_AWT_WM_NONREPARENTING" = 1;
# };
services.sxhkd.enable = true;
xdg.configFile."sxhkd/sxhkdrc" = {
source = ./sxhkdrc;
executable = true;
};
home.file.".local/bin" = {
source = ./scripts;
recursive = true;
executable = true;
};
xsession.windowManager.bspwm = {
enable = true;
monitors = {
"eDP-1" = [ "I" "II" "III" "IV" "V" ];
};
settings = {
border_width = 1;
window_gap = 4;
split_ratio = 0.52;
pointer_modifier = "super";
pointer_action1 = "move";
pointer_action2 = "resize_corner";
focus_follows_pointer = true;
pointer_follows_focus = true;
};
rules = {
Gimp = {
state = "floating";
};
};
startupPrograms = [
# "pgrep -x sxhkd > /dev/null || sxhkd &"
"wmname LG3D"
# "xsetroot -cursor_name left_ptr &"
"tint2"
"feh --bg-scale ${config.custom.wallpaper}"
];
};
}

View File

@ -0,0 +1,3 @@
#!/bin/sh
# Open an app in float mode
bspc rule -a \* -o state=floating && $@

View File

@ -0,0 +1,14 @@
#!/bin/sh
if [ ! -z $1 ]; then
# FLOATING_DESKTOP_ID=$(bspc query -D -d '^3')
FLOATING_DESKTOP_ID=$1
bspc subscribe node_add | while read -a msg ; do
desk_id=${msg[2]}
wid=${msg[4]}
[ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating
done
else
echo "No desktop provided"
fi

60
modules/bspwm/scripts/bsp-smove Executable file
View File

@ -0,0 +1,60 @@
#!/bin/sh
# A more fluid way of moving windows with BSPWM, which is meant to be
# implemented in SXHKD. If there is a window in the given direction,
# swap places with it. Else if there is a receptacle move to it
# ("consume" its place). Otherwise create a receptacle in the given
# direction by splitting the entire viewport (circumvents the tiling
# scheme while respecting the current split ratio configuration). In
# the latter scenario, inputting the direction twice will thus move the
# focused window out of its current layout and into the receptacle.
#
# Part of my dotfiles: https://gitlab.com/protesilaos/dotfiles
#
# Copyright (c) 2019 Protesilaos Stavrou <info@protesilaos.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
[ "$#" -eq 1 ] || { echo "Pass only one argument: north,east,south,west"; exit 1; }
# Check if argument is a valid direction.
case "$1" in
north|east|south|west)
dir="$1"
;;
*)
echo "Not a valid argument."
echo "Use one of: north,east,south,west"
exit 1
;;
esac
_query_nodes() {
bspc query -N -n "$@"
}
# Do not operate on floating windows!
[ -z "$(_query_nodes focused.floating)" ] || { echo "Only move tiled windows."; exit 1; }
receptacle="$(_query_nodes 'any.leaf.!window')"
# This regulates the behaviour documented in the description.
if [ -n "$(_query_nodes "${dir}.!floating")" ]; then
bspc node -s "$dir"
elif [ -n "$receptacle" ]; then
bspc node focused -n "$receptacle" --follow
else
bspc node @/ -p "$dir" -i && bspc node -n "$receptacle" --follow
fi

View File

@ -0,0 +1,17 @@
#!/bin/sh
declare -A layout_symbols
layout_symbols[monocle]="mono"
layout_symbols[tiled]="tiled"
send_symbol() {
echo ${layout_symbols[$1]}
}
# Optional, sends first output. This requires jq
send_symbol $(bspc query -T --desktop focused | jq -r '.layout')
bspc subscribe desktop_layout | while read -a msg ; do
send_symbol ${msg[3]}
done

View File

@ -0,0 +1,37 @@
#!/bin/bash
if [ $# = 0 ]; then
cat <<EOF
Usage: $(basename "${0}") process_name [executable_name] [--take-first]
process_name As recognized by 'xdo' command
executable_name As used for launching from terminal
--take-first In case 'xdo' returns multiple process IDs
EOF
exit 0
fi
# Get id of process by class name and then fallback to instance name
id=$(xdo id -N "${1}" || xdo id -n "${1}")
executable=${1}
shift
while [ -n "${1}" ]; do
case ${1} in
--take-first)
id=$(head -1 <<<"${id}" | cut -f1 -d' ')
;;
*)
executable=${1}
;;
esac
shift
done
if [ -z "${id}" ]; then
${executable}
else
while read -r instance; do
bspc node "${instance}" --flag hidden --to-monitor focused --focus
done <<<"${id}"
fi

1830
modules/bspwm/scripts/pfetch Executable file

File diff suppressed because it is too large Load Diff

9
modules/bspwm/scripts/rofi-ask Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
# Take password prompt from STDIN, print password to STDOUT
# the sed piece just removes the colon from the provided
# prompt: rofi -p already gives us a colon
rofi -dmenu \
-password \
-no-fixed-num-lines \
-p "$(printf "$1" | sed s/://)"

View File

@ -0,0 +1,5 @@
#!/bin/sh
awk '/^[a-z]/ && last {print "<small>",$0,"\t",last,"</small>"} {last=""} /^#/{last=$0}' ~/.config/sxhkd/sxhkdrc{,.common} |
column -t -s $'\t' |
rofi -dmenu -i -markup-rows -no-show-icons -width 1000 -lines 15

View File

@ -0,0 +1,9 @@
#!/bin/sh
id=$(bspc query -N -n);
if [ "$(tabc printclass $id)" == "tabbed" ]; then
bspc node -p $1;
tabc detach $id;
else \
tabc attach $id $(bspc query -N -n $1);
fi

176
modules/bspwm/sxhkdrc Executable file
View File

@ -0,0 +1,176 @@
#
# wm independent hotkeys
#
# Open kitty
super + Return
kitty
# Open floating kitty
super + shift + Return
bsp-float kitty
# launch program (drun)
super + @space
rofi -show drun
# launch program (standard run)
super + shift + @space
rofi -show run
# make sxhkd reload its configuration files:
super + Escape
pkill -USR1 -x sxhkd; notify-send 'Key daemon reloaded'
# Start a qutebrowser search
super + o
qutesearch
# Show keybinds
super + slash
sxhkd-help
# Show clipmenu
super + v
rofi -modi "clipboard:greenclip print" -show clipboard -run-command '{cmd}'
super + shift + v
greenclip clear
#
# bspwm hotkeys
#
# quit/restart bspwm
super + shift + {q,r}
bspc {quit,wm -r}
# close and kill
super + {_,shift + }w
bspc node -{c,k}
super + q
bspc node -c
# superernate between the tiled and monocle layout
super + m
bspc desktop -l next
# send the newest marked node to the newest preselected node
super + y
bspc node newest.marked.local -n newest.!automatic.local
# swap the current node and the biggest window
super + g
bspc node -s biggest.window
# Reveal hidden kitty (scratchpad)
super + alt + Return
bsp-toggle-visibility KittyScratch "kitty --class KittyScratch"
# flameshot
super + Print
flameshot gui
#
# state/flags
#
# set the window state
super + {z,shift + z,x,f}
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
# set the node flags
super + ctrl + {m,x,y,z}
bspc node -g {marked,locked,sticky,private}
#
# focus/swap
#
# focus the node in the given direction
super + {h,j,k,l,Left,Down,Up,Right}
bspc node -{f} {west,south,north,east,west,south,north,east}
# focus the node for the given path jump
super + {p,b,comma,period}
bspc node -f @{parent,brother,first,second}
# focus the next/previous window in the current desktop
super + {a,d}
bspc node -f {next,prev}.local.!hidden.window
# focus the next/previous desktop in the current monitor
super + bracket{left,right}
bspc desktop -f {prev,next}.local
# focus the last node/desktop
super + {grave,Tab}
bspc {node,desktop} -f last
# focus the older or newer node in the focus history
# super + {o,i}
# bspc wm -h off; \
# bspc node {older,newer} -f; \
# bspc wm -h on
# focus or send to the given desktop
super + {_,shift + }{1-9,0}
bspc {desktop -f,node -d} '^{1-9,10}'
#
# preselect
#
# preselect the direction
super + ctrl + shift {h,j,k,l,Left,Down,Up,Right}
bspc node -p {west,south,north,east,west,south,north,east}
# preselect the ratio
super + ctrl + {1-9}
bspc node -o 0.{1-9}
# cancel the preselection for the focused node
super + ctrl + space
bspc node -p cancel
# cancel the preselection for the focused desktop
super + ctrl + shift + space
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
#
# move/resize
#
# Resize a window by moving one of its side outward/inward
super + s ; {h,j,k,l,Left,Down,Up,Right}
STEP=20; SELECTION={1,2,3,4,1,2,3,4}; \
bspc node -z $(echo "left -$STEP 0,bottom 0 $STEP,top 0 -$STEP,right $STEP 0" | cut -d',' -f$SELECTION) || \
bspc node -z $(echo "right -$STEP 0,top 0 $STEP,bottom 0 -$STEP,left $STEP 0" | cut -d',' -f$SELECTION)
# move a floating window
super + {h,j,k,l}
bspc node -v {-30 0,0 20,0 -30,20 0}
# move a window
super + shift + {h,j,k,l,Left,Down,Up,Right}
bsp-smove {west,south,north,east,west,south,north,east}
#
# tabs
#
# move in/out of tabbed container
super + ctrl + {h,j,k,l,Left,Down,Up,Right}
tabc-smart-detach {west,south,north,east,west,south,north,east}
# tab/untab window
super + t
id=$(bspc query -N -n); \
[[ "$(tabc printclass $id)" == "tabbed" ]] \
&& tabc detach $id \
|| tabc create $id
# toggle autoattach in tabbed container
super + shift + t
tabc autoattach $(bspc query -N -n)

10
modules/discord/home.nix Normal file
View File

@ -0,0 +1,10 @@
{ pkgs, lib, ... }: {
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"discord"
];
home.packages = [
pkgs.discord
];
}

4
modules/fish/default.nix Normal file
View File

@ -0,0 +1,4 @@
{ ... }: {
# Although we are configuring fish in home manager, this is needed for vendor completions within fish.
programs.fish.enable = true;
}

16
modules/fish/home.nix Normal file
View File

@ -0,0 +1,16 @@
{ pkgs, ... }: {
home.packages = [
pkgs.grc
pkgs.fishPlugins.grc
];
programs.fish = {
enable = true;
interactiveShellInit = ''
set fish_greeting # Disable greeting
'';
shellAliases = {
l = "ls -lh";
};
};
}

13
modules/homeModule.nix Normal file
View File

@ -0,0 +1,13 @@
{ lib, ... }:
{
options = {
homeManager = lib.mkOption {
type = lib.types.set;
};
};
config = {
home-manager.users.dakedres = config.homeManager;
};
}

View File

@ -0,0 +1,8 @@
{ pkgs, ... }: {
# Add to xsessions
programs.hyprland = {
enable = true;
xwayland.enable = true;
portalPackage = pkgs.xdg-desktop-portal-hyprland;
};
}

135
modules/hyprland/home.nix Normal file
View File

@ -0,0 +1,135 @@
{ pkgs, ... }: {
imports = [
../qutesearch/home.nix
../waybar/home.nix
../rofi/home.nix
];
home.packages = [
pkgs.swaybg
];
# When swhkd is available, wlogout could be started via a script
# that disables keybind watching, starts wlogout, and enables keybind
# watching again once it's closed
programs.wlogout = {
enable = true;
};
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
configPackages = [
pkgs.xdg-desktop-portal-gtk
];
};
wayland.windowManager.hyprland = {
enable = true;
settings = {
exec-once = [
"swaybg -i $WALLPAPER"
"waybar"
];
monitor = [
"eDP-1,1920x1080@59.96,0x0,auto"
# "X11-1,600x800@59.96,0x0,auto"
];
input = {
# kb_options = "caps:swapescape,altwin:swap_alt_win";
};
general = {
gaps_in = 3;
gaps_out = 6;
};
group = {
groupbar = {
gradients = false;
text_color = "0xff111111";
};
};
misc = {
disable_hyprland_logo = true;
background_color = "0x000000";
};
animation = [
"workspaces,1,3,default,slidevert"
"windows,1,2,default,slide"
];
workspace = [
"name:I"
"name:II"
"name:III"
"name:IV"
"name:V"
];
windowrule = [
"fullscreen,noanim,noborder,title:(Albert)"
];
"$mod" = "SUPER";
bind = [
"$mod, Return, exec, $TERMINAL"
"$mod, o, exec, qutesearch"
"$mod, Space, exec, rofi -show drun"
"SUPERSHIFT, Space, exec, rofi -show run"
"$mod, Escape, exec, wlogout"
"$mod, w, killactive" # This closes the window and the name is dumb
"$mod, f, togglefloating"
"$mod, t, togglegroup"
"$mod, h, movefocus, l"
"$mod, j, movefocus, d"
"$mod, k, movefocus, u"
"$mod, l, movefocus, r"
"$mod, left, movefocus, l"
"$mod, down, movefocus, d"
"$mod, up, movefocus, u"
"$mod, right, movefocus, r"
"$mod, a, changegroupactive, f"
"$mod, d, changegroupactive, f"
"$mod, Tab, cyclenext"
"SUPERSHIFT, h, movewindoworgroup, l"
"SUPERSHIFT, j, movewindoworgroup, d"
"SUPERSHIFT, k, movewindoworgroup, u"
"SUPERSHIFT, l, movewindoworgroup, r"
"SUPERSHIFT, left, movewindoworgroup, l"
"SUPERSHIFT, down, movewindoworgroup, d"
"SUPERSHIFT, up, movewindoworgroup, u"
"SUPERSHIFT, right, movewindoworgroup, r"
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
};
};
}

58
modules/kitty/colors.nix Normal file
View File

@ -0,0 +1,58 @@
{ config, lib, ... }:
{
options.custom.colors.kitty = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
};
};
config = lib.mkIf config.custom.colors.kitty.enable {
programs.kitty.settings = with config.custom.colors; {
# Based on https://github.com/mk12/base16-kitty
background = base00;
foreground = base05;
selection_background = base05;
selection_foreground = base00;
url_color = base0D;
cursor = base0D;
cursor_text_color = base00;
active_border_color = base03;
inactive_border_color = base01;
active_tab_background = base00;
active_tab_foreground = base05;
inactive_tab_background = base01;
inactive_tab_foreground = base04;
# Normal
color0 = base00;
color1 = base08;
color2 = base0B;
color3 = base0A;
color4 = base0D;
color5 = base0E;
color6 = base0C;
color7 = base05;
# Bright (same as Normal except 8/15)
color8 = base03;
color9 = base08;
color10 = base0B;
color11 = base0A;
color12 = base0D;
color13 = base0E;
color14 = base0C;
color15 = base07;
# Other (like base16-shell)
color16 = base09;
color17 = base0F;
color18 = base01;
color19 = base02;
color20 = base04;
color21 = base06;
};
};
}

16
modules/kitty/home.nix Normal file
View File

@ -0,0 +1,16 @@
{ ... }: {
imports = [ ./colors.nix ];
programs.kitty = {
enable = true;
shellIntegration.enableFishIntegration = true;
settings = {
editor = "micro";
confirm_os_window_close = 0;
enable_audio_bell = false;
visual_bell_duration = "0.6";
visual_bell_color = "#111111";
};
};
}

51
modules/ncspot/colors.nix Normal file
View File

@ -0,0 +1,51 @@
{ config, lib, ... }:
{
options.custom.colors.ncspot = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
};
};
config = lib.mkIf config.custom.colors.ncspot.enable {
programs.ncspot.settings.theme = with config.custom.colors; {
# Attempts to look kinda green like the official client
background = base00;
primary = base04;
secondary = base01;
title = base0B; # green
playing = base0B; # green
playing_selected = base0C; # cyan
playing_bg = base06;
highlight = base04;
highlight_bg = base02;
error = base04;
error_bg = base08;
statusbar = base00;
statusbar_progress = base0B;
statusbar_bg = base0B;
cmdline = base04;
search_match = base0A;
# background = "black"
# primary = "light white"
# secondary = "light black"
# title = "green"
# playing = "green"
# playing_selected = "light green"
# playing_bg = "black"
# highlight = "light white"
# highlight_bg = "#484848"
# error = "light white"
# error_bg = "red"
# statusbar = "black"
# statusbar_progress = "green"
# statusbar_bg = "green"
# cmdline = "light white"
# cmdline_bg = "black"
# search_match = "light red"
};
};
}

14
modules/ncspot/home.nix Normal file
View File

@ -0,0 +1,14 @@
{ pkgs, ... }: {
imports = [ ./colors.nix ];
home.packages = [
pkgs.ueberzugpp
];
programs.ncspot = {
enable = true;
settings = {
cover_max_scale = 2;
};
};
}

View File

@ -0,0 +1,291 @@
# Adaptation of the base16 qutebrowser theme by theova
# (https://github.com/theova/base16-qutebrowser)
{ config, lib, ... }:
{
options.custom.colors.qutebrowser = {
enable = lib.mkOption {
type = lib.types.bool;
default = true;
};
};
config = lib.mkIf config.custom.colors.qutebrowser.enable {
programs.qutebrowser.settings = with config.custom.colors; {
# Text color of the completion widget. May be a single color to use for
# all columns or a list of three colors, one for each column.
colors.completion.fg = base05;
# Background color of the completion widget for odd rows.
colors.completion.odd.bg = base01;
# Background color of the completion widget for even rows.
colors.completion.even.bg = base00;
# Foreground color of completion widget category headers.
colors.completion.category.fg = base0A;
# Background color of the completion widget category headers.
colors.completion.category.bg = base00;
# Top border color of the completion widget category headers.
colors.completion.category.border.top = base00;
# Bottom border color of the completion widget category headers.
colors.completion.category.border.bottom = base00;
# Foreground color of the selected completion item.
colors.completion.item.selected.fg = base05;
# Background color of the selected completion item.
colors.completion.item.selected.bg = base02;
# Top border color of the selected completion item.
colors.completion.item.selected.border.top = base02;
# Bottom border color of the selected completion item.
colors.completion.item.selected.border.bottom = base02;
# Foreground color of the matched text in the selected completion item.
colors.completion.item.selected.match.fg = base0B;
# Foreground color of the matched text in the completion.
colors.completion.match.fg = base0B;
# Color of the scrollbar handle in the completion view.
colors.completion.scrollbar.fg = base05;
# Color of the scrollbar in the completion view.
colors.completion.scrollbar.bg = base00;
# Background color of disabled items in the context menu.
colors.contextmenu.disabled.bg = base01;
# Foreground color of disabled items in the context menu.
colors.contextmenu.disabled.fg = base04;
# Background color of the context menu. If set to null, the Qt default is used.
colors.contextmenu.menu.bg = base00;
# Foreground color of the context menu. If set to null, the Qt default is used.
colors.contextmenu.menu.fg = base05;
# Background color of the context menus selected item. If set to null, the Qt default is used.
colors.contextmenu.selected.bg = base02;
#Foreground color of the context menus selected item. If set to null, the Qt default is used.
colors.contextmenu.selected.fg = base05;
# Background color for the download bar.
colors.downloads.bar.bg = base00;
# Color gradient start for download text.
colors.downloads.start.fg = base00;
# Color gradient start for download backgrounds.
colors.downloads.start.bg = base0D;
# Color gradient end for download text.
colors.downloads.stop.fg = base00;
# Color gradient stop for download backgrounds.
colors.downloads.stop.bg = base0C;
# Foreground color for downloads with errors.
colors.downloads.error.fg = base08;
# Font color for hints.
colors.hints.fg = base00;
# Background color for hints. Note that you can use a `rgba(...)` value
# for transparency.
colors.hints.bg = base0A;
# Font color for the matched part of hints.
colors.hints.match.fg = base05;
# Text color for the keyhint widget.
colors.keyhint.fg = base05;
# Highlight color for keys to complete the current keychain.
colors.keyhint.suffix.fg = base05;
# Background color of the keyhint widget.
colors.keyhint.bg = base00;
# Foreground color of an error message.
colors.messages.error.fg = base00;
# Background color of an error message.
colors.messages.error.bg = base08;
# Border color of an error message.
colors.messages.error.border = base08;
# Foreground color of a warning message.
colors.messages.warning.fg = base00;
# Background color of a warning message.
colors.messages.warning.bg = base0E;
# Border color of a warning message.
colors.messages.warning.border = base0E;
# Foreground color of an info message.
colors.messages.info.fg = base05;
# Background color of an info message.
colors.messages.info.bg = base00;
# Border color of an info message.
colors.messages.info.border = base00;
# Foreground color for prompts.
colors.prompts.fg = base05;
# Border used around UI elements in prompts.
colors.prompts.border = base00;
# Background color for prompts.
colors.prompts.bg = base00;
# Background color for the selected item in filename prompts.
colors.prompts.selected.bg = base02;
# Foreground color for the selected item in filename prompts.
colors.prompts.selected.fg = base05;
# Foreground color of the statusbar.
colors.statusbar.normal.fg = base0B;
# Background color of the statusbar.
colors.statusbar.normal.bg = base00;
# Foreground color of the statusbar in insert mode.
colors.statusbar.insert.fg = base00;
# Background color of the statusbar in insert mode.
colors.statusbar.insert.bg = base0D;
# Foreground color of the statusbar in passthrough mode.
colors.statusbar.passthrough.fg = base00;
# Background color of the statusbar in passthrough mode.
colors.statusbar.passthrough.bg = base0C;
# Foreground color of the statusbar in private browsing mode.
colors.statusbar.private.fg = base00;
# Background color of the statusbar in private browsing mode.
colors.statusbar.private.bg = base01;
# Foreground color of the statusbar in command mode.
colors.statusbar.command.fg = base05;
# Background color of the statusbar in command mode.
colors.statusbar.command.bg = base00;
# Foreground color of the statusbar in private browsing + command mode.
colors.statusbar.command.private.fg = base05;
# Background color of the statusbar in private browsing + command mode.
colors.statusbar.command.private.bg = base00;
# Foreground color of the statusbar in caret mode.
colors.statusbar.caret.fg = base00;
# Background color of the statusbar in caret mode.
colors.statusbar.caret.bg = base0E;
# Foreground color of the statusbar in caret mode with a selection.
colors.statusbar.caret.selection.fg = base00;
# Background color of the statusbar in caret mode with a selection.
colors.statusbar.caret.selection.bg = base0D;
# Background color of the progress bar.
colors.statusbar.progress.bg = base0D;
# Default foreground color of the URL in the statusbar.
colors.statusbar.url.fg = base05;
# Foreground color of the URL in the statusbar on error.
colors.statusbar.url.error.fg = base08;
# Foreground color of the URL in the statusbar for hovered links.
colors.statusbar.url.hover.fg = base05;
# Foreground color of the URL in the statusbar on successful load
# (http).
colors.statusbar.url.success.http.fg = base0C;
# Foreground color of the URL in the statusbar on successful load
# (https).
colors.statusbar.url.success.https.fg = base0B;
# Foreground color of the URL in the statusbar when there's a warning.
colors.statusbar.url.warn.fg = base0E;
# Background color of the tab bar.
colors.tabs.bar.bg = base00;
# Color gradient start for the tab indicator.
colors.tabs.indicator.start = base0D;
# Color gradient end for the tab indicator.
colors.tabs.indicator.stop = base0C;
# Color for the tab indicator on errors.
colors.tabs.indicator.error = base08;
# Foreground color of unselected odd tabs.
colors.tabs.odd.fg = base05;
# Background color of unselected odd tabs.
colors.tabs.odd.bg = base01;
# Foreground color of unselected even tabs.
colors.tabs.even.fg = base05;
# Background color of unselected even tabs.
colors.tabs.even.bg = base00;
# Background color of pinned unselected even tabs.
colors.tabs.pinned.even.bg = base0C;
# Foreground color of pinned unselected even tabs.
colors.tabs.pinned.even.fg = base07;
# Background color of pinned unselected odd tabs.
colors.tabs.pinned.odd.bg = base0B;
# Foreground color of pinned unselected odd tabs.
colors.tabs.pinned.odd.fg = base07;
# Background color of pinned selected even tabs.
colors.tabs.pinned.selected.even.bg = base02;
# Foreground color of pinned selected even tabs.
colors.tabs.pinned.selected.even.fg = base05;
# Background color of pinned selected odd tabs.
colors.tabs.pinned.selected.odd.bg = base02;
# Foreground color of pinned selected odd tabs.
colors.tabs.pinned.selected.odd.fg = base05;
# Foreground color of selected odd tabs.
colors.tabs.selected.odd.fg = base05;
# Background color of selected odd tabs.
colors.tabs.selected.odd.bg = base02;
# Foreground color of selected even tabs.
colors.tabs.selected.even.fg = base05;
# Background color of selected even tabs.
colors.tabs.selected.even.bg = base02;
};
};
}

View File

@ -0,0 +1,23 @@
{ ... }: {
imports = [ ./colors.nix ];
programs.qutebrowser = {
enable = true;
loadAutoconfig = true;
keyBindings = {
normal = {
"gp" = "mode-enter passthrough";
};
};
settings = {
tabs = {
tabs_are_windows = true;
show = "never";
};
colors = {
webpage.darkmode.enabled = true;
};
};
};
}

View File

@ -0,0 +1,8 @@
{ pkgs, ... }: {
home.file.".local/bin/qutesearch".source = ./qutesearch;
home.packages = [
pkgs.sqlite
pkgs.qutebrowser
];
}

6
modules/qutesearch/qutesearch Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
db=$HOME/.local/share/qutebrowser/history.sqlite
url=$(sqlite3 "$db" "select title,url from History" | tac | awk '!a[$0]++' | rofi -dmenu | awk -F '|' '{print $NF}')
[ -z "$url" ] && exit
qutebrowser --target window "$url"

7
modules/rofi/home.nix Normal file
View File

@ -0,0 +1,7 @@
{ ... }: {
programs.rofi = {
enable = true;
location = "top";
};
}

7
modules/tint2/home.nix Normal file
View File

@ -0,0 +1,7 @@
{ ... }: {
programs.tint2.enable = true;
xdg.configFile."tint2/tint2rc" = {
source = ./tint2rc;
executable = true;
};
}

269
modules/tint2/tint2rc Executable file
View File

@ -0,0 +1,269 @@
#---- Generated by tint2conf b81d ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options.
#-------------------------------------
# Gradients
# Gradient 1
gradient = horizontal
start_color = #000000 60
end_color = #000000 0
color_stop = 60.000000 #000000 49
color_stop = 0.000000 #000000 90
#-------------------------------------
# Backgrounds
# Background 1: Panel
rounded = 0
border_width = 0
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 0
border_color = #000000 0
gradient_id = 1
background_color_hover = #000000 0
border_color_hover = #000000 0
background_color_pressed = #000000 0
border_color_pressed = #000000 30
# Background 2: Active desktop name
rounded = 4
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #777777 20
border_color = #777777 30
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 3: Active task
rounded = 4
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #777777 20
border_color = #ffffff 40
background_color_hover = #aaaaaa 22
border_color_hover = #eaeaea 44
background_color_pressed = #555555 4
border_color_pressed = #eaeaea 44
# Background 4: Urgent task
rounded = 4
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #aa4400 100
border_color = #aa7733 100
background_color_hover = #cc7700 100
border_color_hover = #aa7733 100
background_color_pressed = #555555 4
border_color_pressed = #aa7733 100
# Background 5: Tooltip
rounded = 1
border_width = 1
border_sides = TBLR
border_content_tint_weight = 0
background_content_tint_weight = 0
background_color = #000000 30
border_color = #000000 0
background_color_hover = #ffffaa 100
border_color_hover = #000000 100
background_color_pressed = #ffffaa 100
border_color_pressed = #000000 100
#-------------------------------------
# Panel
panel_items = PT:S:C:
panel_size = 100% 40
panel_margin = 0 0
panel_padding = 2 0 2
panel_background_id = 1
wm_menu = 1
panel_dock = 0
panel_pivot_struts = 0
panel_position = bottom left vertical
panel_layer = top
panel_monitor = all
panel_shrink = 0
autohide = 0
autohide_show_timeout = 0
autohide_hide_timeout = 0.5
autohide_height = 2
strut_policy = follow_size
panel_window_name = tint2
disable_transparency = 0
mouse_effects = 1
font_shadow = 0
mouse_hover_icon_asb = 100 0 10
mouse_pressed_icon_asb = 100 0 0
scale_relative_to_dpi = 0
scale_relative_to_screen_height = 0
#-------------------------------------
# Taskbar
taskbar_mode = multi_desktop
taskbar_hide_if_empty = 0
taskbar_padding = 0 0 4
taskbar_background_id = 0
taskbar_active_background_id = 0
taskbar_name = 1
taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0
taskbar_hide_different_desktop = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 1 0
taskbar_name_background_id = 0
taskbar_name_active_background_id = 2
taskbar_name_font = Ubuntu Ultra-Bold 10
taskbar_name_font_color = #e3e3e3 100
taskbar_name_active_font_color = #ffffff 100
taskbar_distribute_size = 1
taskbar_sort_order = none
task_align = left
#-------------------------------------
# Task
task_text = 0
task_icon = 1
task_centered = 1
urgent_nb_of_blink = 100000
task_maximum_size = 150 35
task_padding = 2 2 4
task_tooltip = 1
task_thumbnail = 1
task_thumbnail_size = 210
task_font_color = #ffffff 100
task_background_id = 0
task_active_background_id = 3
task_urgent_background_id = 4
task_iconified_background_id = 0
mouse_left = toggle
mouse_middle = none
mouse_right = close
mouse_scroll_up = desktop_left
mouse_scroll_down = desktop_right
#-------------------------------------
# System tray (notification area)
systray_padding = 0 4 2
systray_background_id = 0
systray_sort = ascending
systray_icon_size = 24
systray_icon_asb = 100 0 0
systray_monitor = 1
systray_name_filter =
#-------------------------------------
# Launcher
launcher_padding = 2 4 2
launcher_background_id = 0
launcher_icon_background_id = 0
launcher_icon_size = 24
launcher_icon_asb = 100 0 0
launcher_icon_theme_override = 0
startup_notifications = 1
launcher_tooltip = 1
launcher_item_app = tint2conf.desktop
launcher_item_app = firefox.desktop
launcher_item_app = iceweasel.desktop
launcher_item_app = chromium-browser.desktop
launcher_item_app = google-chrome.desktop
#-------------------------------------
# Clock
time1_format = %I
time2_format = %M
time1_font = Ubuntu Mono Bold 10
time1_timezone =
time2_timezone =
time2_font = Ubuntu Mono Medium 10
clock_font_color = #ffffff 100
clock_padding = 2 0
clock_background_id = 0
clock_tooltip =
clock_tooltip_timezone =
clock_lclick_command =
clock_rclick_command = orage
clock_mclick_command =
clock_uwheel_command =
clock_dwheel_command =
#-------------------------------------
# Battery
battery_tooltip = 1
battery_low_status = 10
battery_low_cmd = xmessage 'tint2: Battery low!'
battery_full_cmd =
battery_font_color = #ffffff 100
bat1_format =
bat2_format =
battery_padding = 1 0
battery_background_id = 0
battery_hide = 101
battery_lclick_command =
battery_rclick_command =
battery_mclick_command =
battery_uwheel_command =
battery_dwheel_command =
ac_connected_cmd =
ac_disconnected_cmd =
#-------------------------------------
# Separator 1
separator = new
separator_background_id = 0
separator_color = #777777 80
separator_style = empty
separator_size = 3
separator_padding = 4 0
#-------------------------------------
# Separator 2
separator = new
separator_background_id = 0
separator_color = #777777 80
separator_style = empty
separator_size = 3
separator_padding = 1 0
#-------------------------------------
# Separator 3
separator = new
separator_background_id = 0
separator_color = #777777 80
separator_style = empty
separator_size = 3
separator_padding = 1 0
#-------------------------------------
# Button 1
button = new
button_icon = search
button_text =
button_lclick_command = rofi -show run
button_rclick_command =
button_mclick_command =
button_uwheel_command =
button_dwheel_command =
button_font = Ubuntu 10
button_font_color = #ffffff 100
button_padding = 0 7
button_background_id = 0
button_centered = 1
button_max_icon_size = 0
#-------------------------------------
# Tooltip
tooltip_show_timeout = 0.5
tooltip_hide_timeout = 0.1
tooltip_padding = 4 4
tooltip_background_id = 5
tooltip_font_color = #dddddd 100

View File

@ -0,0 +1,26 @@
[
{
"height": 1080,
"hyprland/workspaces": {
"active-only": false,
"format": "{name}"
},
"layer": "top",
"modules-center": [],
"modules-left": [
"hyprland/workspaces"
],
"modules-right": [
"tray",
"wireplumber"
],
"output": [
"eDP-1"
],
"position": "left",
"width": 30,
"wireplumber": {
"scroll-step": 5
}
}
]

51
modules/waybar/home.nix Normal file
View File

@ -0,0 +1,51 @@
{ ... }: {
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "left";
height = 1080;
width = 30;
output = [
"eDP-1"
];
modules-left = [ "hyprland/workspaces" ];
modules-right = [ "hyprland/submap" "tray" "wireplumber" ];
"hyprland/workspaces" = {
active-only = false;
format = "<b>{name}</b>\n{windows}";
format-window-separator = "\n";
persistent-workspaces."*" = 5;
};
"hyprland/window" = {
format= "{title}";
separate-outputs = true;
};
"hyprland/submap" = {
max-length = 8;
format = "lol {}";
tooltip = true;
};
"tray" = {
spacing = 10;
icon-size = 20;
};
"wireplumber" = {
scroll-step = 5;
};
};
};
};
}

0
scripts/qutesearch.nix Normal file
View File

2
test.fish Executable file
View File

@ -0,0 +1,2 @@
#! /etc/fish

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 KiB

BIN
wallpapers/blopies.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
wallpapers/blorbos.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
wallpapers/currents.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
wallpapers/eyes.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 MiB

BIN
wallpapers/flesh.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
wallpapers/trails.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB