Add initial home manager configuration
This commit is contained in:
parent
4363d1a7d4
commit
a022c8a7da
145
bin/apply
145
bin/apply
@ -1,145 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
VERSION=1.0
|
||||
|
||||
# Color codes
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Determine the operating system
|
||||
export OS=$(uname)
|
||||
|
||||
# Primary network interface
|
||||
if [[ "$OS" != "Darwin" ]]; then
|
||||
export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}')
|
||||
echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}"
|
||||
fi
|
||||
|
||||
# Custom print function
|
||||
_print() {
|
||||
if [[ "$OS" == "Darwin" ]]; then
|
||||
echo -e "$1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Custom prompt function
|
||||
_prompt() {
|
||||
local message="$1"
|
||||
local variable="$2"
|
||||
|
||||
_print "$message"
|
||||
read -r $variable
|
||||
}
|
||||
|
||||
# Fetch username from the system
|
||||
export USERNAME=$(whoami)
|
||||
|
||||
# If the username is 'nixos' or 'root', ask the user for their username
|
||||
if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then
|
||||
_prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME
|
||||
fi
|
||||
|
||||
# Check if git is available
|
||||
if command -v git >/dev/null 2>&1; then
|
||||
# Fetch email and name from git config
|
||||
export GIT_EMAIL=$(git config --get user.email)
|
||||
export GIT_NAME=$(git config --get user.name)
|
||||
else
|
||||
_print "${RED}Git is not available on this system.${NC}"
|
||||
fi
|
||||
|
||||
# If git email is not found or git is not available, ask the user
|
||||
if [[ -z "$GIT_EMAIL" ]]; then
|
||||
_prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL
|
||||
fi
|
||||
|
||||
# If git name is not found or git is not available, ask the user
|
||||
if [[ -z "$GIT_NAME" ]]; then
|
||||
_prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME
|
||||
fi
|
||||
|
||||
select_boot_disk() {
|
||||
local disks
|
||||
local _boot_disk
|
||||
|
||||
_print "${YELLOW}Available disks:${NC}"
|
||||
disks=$(lsblk -nd --output NAME,SIZE | grep -v loop)
|
||||
echo "$disks"
|
||||
|
||||
# Warning message for data deletion
|
||||
_print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}"
|
||||
_prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk
|
||||
|
||||
# Confirmation for disk selection to prevent accidental data loss
|
||||
_print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}"
|
||||
read -r confirmation
|
||||
if [[ "$confirmation" =~ ^[Yy]$ ]]; then
|
||||
export BOOT_DISK=$_boot_disk
|
||||
else
|
||||
_print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Set hostname and find primary disk if this is NixOS
|
||||
if [[ "$OS" != "Darwin" ]]; then
|
||||
_prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME
|
||||
export HOST_NAME
|
||||
select_boot_disk
|
||||
fi
|
||||
|
||||
# Confirmation step
|
||||
confirm_details() {
|
||||
_print "${GREEN}Username: $USERNAME"
|
||||
_print "Email: $GIT_EMAIL"
|
||||
_print "Name: $GIT_NAME${NC}"
|
||||
|
||||
if([[ "$OS" != "Darwin" ]]); then
|
||||
_print "${GREEN}Primary interface: $PRIMARY_IFACE"
|
||||
_print "Boot disk: $BOOT_DISK"
|
||||
_print "Hostname: $HOST_NAME${NC}"
|
||||
fi
|
||||
|
||||
_prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice
|
||||
|
||||
case "$choice" in
|
||||
[Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;;
|
||||
[Yy] ) _print "${GREEN}Continuing...${NC}";;
|
||||
* ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Call the confirmation function
|
||||
confirm_details
|
||||
|
||||
# Function to replace tokens in each file
|
||||
replace_tokens() {
|
||||
local file="$1"
|
||||
if [[ $(basename $1) != "apply" ]]; then
|
||||
if [[ "$OS" == "Darwin" ]]; then
|
||||
# macOS
|
||||
LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file"
|
||||
LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file"
|
||||
LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file"
|
||||
else
|
||||
# Linux or other
|
||||
sed -i -e "s/%USER%/$USERNAME/g" "$file"
|
||||
sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file"
|
||||
sed -i -e "s/%NAME%/$GIT_NAME/g" "$file"
|
||||
sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file"
|
||||
sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file"
|
||||
sed -i -e "s/%HOST%/$HOST_NAME/g" "$file"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Traverse directories and call replace_tokens on each Nix file
|
||||
export -f replace_tokens
|
||||
find . -type f -exec bash -c 'replace_tokens "$0"' {} \;
|
||||
|
||||
echo "$USERNAME" > /tmp/username.txt
|
||||
_print "${GREEN}User $USERNAME information applied.${NC}"
|
@ -2,35 +2,37 @@
|
||||
|
||||
[
|
||||
# Development Tools
|
||||
"homebrew/cask/docker"
|
||||
"insomnia"
|
||||
"ngrok"
|
||||
"postico"
|
||||
"visual-studio-code"
|
||||
"docker"
|
||||
"fleet"
|
||||
"kitty"
|
||||
"minizincide"
|
||||
"sublime-merge"
|
||||
"vscodium"
|
||||
|
||||
# Communication Tools
|
||||
"discord"
|
||||
"loom"
|
||||
"notion"
|
||||
"slack"
|
||||
"telegram"
|
||||
"signal"
|
||||
"zoom"
|
||||
"zulip"
|
||||
|
||||
# Utility Tools
|
||||
"appcleaner"
|
||||
"syncthing"
|
||||
|
||||
# Entertainment Tools
|
||||
"steam"
|
||||
"vlc"
|
||||
"calibre"
|
||||
"mirrorop"
|
||||
|
||||
# Productivity Tools
|
||||
"raycast"
|
||||
"asana"
|
||||
"alfred"
|
||||
"mactex-no-gui"
|
||||
"notion"
|
||||
"skim"
|
||||
|
||||
# Browsers
|
||||
"google-chrome"
|
||||
"chromium"
|
||||
"firefox"
|
||||
|
||||
# AI
|
||||
"diffusionbee"
|
||||
# Fonts
|
||||
"font-atkinson-hyperlegible"
|
||||
"font-ibm-plex"
|
||||
"font-iosevka"
|
||||
"font-iosevka-slab"
|
||||
"font-playfair-display"
|
||||
]
|
||||
|
@ -3,7 +3,6 @@
|
||||
let user = "dekker1"; in
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
./home-manager.nix
|
||||
../shared
|
||||
@ -13,91 +12,11 @@ let user = "dekker1"; in
|
||||
# Auto upgrade nix package and the daemon service.
|
||||
services.nix-daemon.enable = true;
|
||||
|
||||
# Setup user, packages, programs
|
||||
nix = {
|
||||
package = pkgs.nixUnstable;
|
||||
settings.trusted-users = [ "@admin" "${user}" ];
|
||||
|
||||
gc = {
|
||||
user = "root";
|
||||
automatic = true;
|
||||
interval = { Weekday = 0; Hour = 2; Minute = 0; };
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
|
||||
# Turn this on to make command line easier
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
};
|
||||
|
||||
# Turn off NIX_PATH warnings now that we're using flakes
|
||||
system.checks.verifyNixPath = false;
|
||||
|
||||
# Load configuration that is shared across systems
|
||||
environment.systemPackages = with pkgs; [
|
||||
emacs-unstable
|
||||
] ++ (import ../shared/packages.nix { inherit pkgs; });
|
||||
|
||||
# Enable fonts dir
|
||||
fonts.fontDir.enable = true;
|
||||
|
||||
launchd.user.agents.emacs.path = [ config.environment.systemPath ];
|
||||
launchd.user.agents.emacs.serviceConfig = {
|
||||
KeepAlive = true;
|
||||
ProgramArguments = [
|
||||
"/bin/sh"
|
||||
"-c"
|
||||
"/bin/wait4path ${pkgs.emacs}/bin/emacs && exec ${pkgs.emacs}/bin/emacs --fg-daemon"
|
||||
];
|
||||
StandardErrorPath = "/tmp/emacs.err.log";
|
||||
StandardOutPath = "/tmp/emacs.out.log";
|
||||
};
|
||||
|
||||
system = {
|
||||
stateVersion = 4;
|
||||
|
||||
defaults = {
|
||||
LaunchServices = {
|
||||
LSQuarantine = false;
|
||||
};
|
||||
|
||||
NSGlobalDomain = {
|
||||
AppleShowAllExtensions = true;
|
||||
ApplePressAndHoldEnabled = false;
|
||||
|
||||
# 120, 90, 60, 30, 12, 6, 2
|
||||
KeyRepeat = 2;
|
||||
|
||||
# 120, 94, 68, 35, 25, 15
|
||||
InitialKeyRepeat = 15;
|
||||
|
||||
"com.apple.mouse.tapBehavior" = 1;
|
||||
"com.apple.sound.beep.volume" = 0.0;
|
||||
"com.apple.sound.beep.feedback" = 0;
|
||||
};
|
||||
|
||||
dock = {
|
||||
autohide = false;
|
||||
show-recents = false;
|
||||
launchanim = true;
|
||||
orientation = "bottom";
|
||||
tilesize = 48;
|
||||
};
|
||||
|
||||
finder = {
|
||||
_FXShowPosixPathInTitle = false;
|
||||
};
|
||||
|
||||
trackpad = {
|
||||
Clicking = true;
|
||||
TrackpadThreeFingerDrag = true;
|
||||
};
|
||||
};
|
||||
|
||||
keyboard = {
|
||||
enableKeyMapping = true;
|
||||
remapCapsLockToControl = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -1,67 +0,0 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.local.dock;
|
||||
inherit (pkgs) stdenv dockutil;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
local.dock.enable = mkOption {
|
||||
description = "Enable dock";
|
||||
default = stdenv.isDarwin;
|
||||
example = false;
|
||||
};
|
||||
|
||||
local.dock.entries = mkOption
|
||||
{
|
||||
description = "Entries on the Dock";
|
||||
type = with types; listOf (submodule {
|
||||
options = {
|
||||
path = lib.mkOption { type = str; };
|
||||
section = lib.mkOption {
|
||||
type = str;
|
||||
default = "apps";
|
||||
};
|
||||
options = lib.mkOption {
|
||||
type = str;
|
||||
default = "";
|
||||
};
|
||||
};
|
||||
});
|
||||
readOnly = true;
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
mkIf cfg.enable
|
||||
(
|
||||
let
|
||||
normalize = path: if hasSuffix ".app" path then path + "/" else path;
|
||||
entryURI = path: "file://" + (builtins.replaceStrings
|
||||
[" " "!" "\"" "#" "$" "%" "&" "'" "(" ")"]
|
||||
["%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29"]
|
||||
(normalize path)
|
||||
);
|
||||
wantURIs = concatMapStrings
|
||||
(entry: "${entryURI entry.path}\n")
|
||||
cfg.entries;
|
||||
createEntries = concatMapStrings
|
||||
(entry: "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n")
|
||||
cfg.entries;
|
||||
in
|
||||
{
|
||||
system.activationScripts.postUserActivation.text = ''
|
||||
echo >&2 "Setting up the Dock..."
|
||||
haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)"
|
||||
if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then
|
||||
echo >&2 "Resetting Dock."
|
||||
${dockutil}/bin/dockutil --no-restart --remove all
|
||||
${createEntries}
|
||||
killall Dock
|
||||
else
|
||||
echo >&2 "Dock setup complete."
|
||||
fi
|
||||
'';
|
||||
}
|
||||
);
|
||||
}
|
@ -4,31 +4,4 @@ let
|
||||
xdg_configHome = "${config.users.users.${user}.home}/.config";
|
||||
xdg_dataHome = "${config.users.users.${user}.home}/.local/share";
|
||||
xdg_stateHome = "${config.users.users.${user}.home}/.local/state"; in
|
||||
{
|
||||
|
||||
# Raycast script so that "Run Emacs" is available and uses Emacs daemon
|
||||
"${xdg_dataHome}/bin/emacsclient" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/zsh
|
||||
#
|
||||
# Required parameters:
|
||||
# @raycast.schemaVersion 1
|
||||
# @raycast.title Run Emacs
|
||||
# @raycast.mode silent
|
||||
#
|
||||
# Optional parameters:
|
||||
# @raycast.packageName Emacs
|
||||
# @raycast.icon ${xdg_dataHome}/img/icons/Emacs.icns
|
||||
# @raycast.iconDark ${xdg_dataHome}/img/icons/Emacs.icns
|
||||
|
||||
if [[ $1 = "-t" ]]; then
|
||||
# Terminal mode
|
||||
${pkgs.emacs}/bin/emacsclient -t $@
|
||||
else
|
||||
# GUI mode
|
||||
${pkgs.emacs}/bin/emacsclient -c -n $@
|
||||
fi
|
||||
'';
|
||||
};
|
||||
}
|
||||
{}
|
||||
|
@ -2,19 +2,10 @@
|
||||
|
||||
let
|
||||
user = "dekker1";
|
||||
# Define the content of your file as a derivation
|
||||
myEmacsLauncher = pkgs.writeScript "emacs-launcher.command" ''
|
||||
#!/bin/sh
|
||||
emacsclient -c -n &
|
||||
'';
|
||||
sharedFiles = import ../shared/files.nix { inherit config pkgs; };
|
||||
additionalFiles = import ./files.nix { inherit user config pkgs; };
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./dock
|
||||
];
|
||||
|
||||
# It me
|
||||
users.users.${user} = {
|
||||
name = "${user}";
|
||||
@ -23,7 +14,7 @@ in
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
|
||||
homebrew.enable = true;
|
||||
homebrew.enable = false;
|
||||
homebrew.casks = pkgs.callPackage ./casks.nix {};
|
||||
|
||||
# These app IDs are from using the mas CLI app
|
||||
@ -34,8 +25,23 @@ in
|
||||
# $ mas search <app name>
|
||||
#
|
||||
homebrew.masApps = {
|
||||
"1password" = 1333542190;
|
||||
"wireguard" = 1451685025;
|
||||
"1Password for Safari" = 1569813296;
|
||||
"Baking Soda" = 1601151613;
|
||||
"Kagi Inc." = 1622835804;
|
||||
"Keynote" = 409183694;
|
||||
"Microsoft Excel" = 462058435;
|
||||
"Microsoft Word" = 462054704;
|
||||
"Numbers" = 409203825;
|
||||
"Pages" = 409201541;
|
||||
"Pixelmator Pro" = 1289583905;
|
||||
"Qantas" = 1468230799;
|
||||
"Slack" = 803453959;
|
||||
"Textual IRC Client" = 1262957439;
|
||||
"The Unarchiver" = 425424353;
|
||||
"Userscripts-Mac-App" = 1463298887;
|
||||
"Vinegar" = 1591303229;
|
||||
"WhatsApp" = 1147396723;
|
||||
"Wipr" = 1320666476;
|
||||
};
|
||||
|
||||
# Enable home-manager
|
||||
@ -47,44 +53,9 @@ in
|
||||
home.file = lib.mkMerge [
|
||||
sharedFiles
|
||||
additionalFiles
|
||||
{ "emacs-launcher.command".source = myEmacsLauncher; }
|
||||
];
|
||||
home.stateVersion = "21.11";
|
||||
programs = {} // import ../shared/home-manager.nix { inherit config pkgs lib; };
|
||||
|
||||
# Marked broken Oct 20, 2022 check later to remove this
|
||||
# https://github.com/nix-community/home-manager/issues/3344
|
||||
manual.manpages.enable = false;
|
||||
};
|
||||
};
|
||||
|
||||
# Fully declarative dock using the latest from Nix Store
|
||||
local.dock.enable = true;
|
||||
local.dock.entries = [
|
||||
{ path = "/Applications/Slack.app/"; }
|
||||
{ path = "/System/Applications/Messages.app/"; }
|
||||
{ path = "/System/Applications/Facetime.app/"; }
|
||||
{ path = "${pkgs.alacritty}/Applications/Alacritty.app/"; }
|
||||
{ path = "/System/Applications/Music.app/"; }
|
||||
{ path = "/System/Applications/News.app/"; }
|
||||
{ path = "/System/Applications/Photos.app/"; }
|
||||
{ path = "/System/Applications/Photo Booth.app/"; }
|
||||
{ path = "/System/Applications/TV.app/"; }
|
||||
{ path = "/System/Applications/Home.app/"; }
|
||||
{
|
||||
path = toString myEmacsLauncher;
|
||||
section = "others";
|
||||
}
|
||||
{
|
||||
path = "${config.users.users.${user}.home}/.local/share/";
|
||||
section = "others";
|
||||
options = "--sort name --view grid --display folder";
|
||||
}
|
||||
{
|
||||
path = "${config.users.users.${user}.home}/.local/share/downloads";
|
||||
section = "others";
|
||||
options = "--sort name --view grid --display stack";
|
||||
}
|
||||
];
|
||||
|
||||
}
|
||||
|
@ -3,5 +3,6 @@
|
||||
with pkgs;
|
||||
let shared-packages = import ../shared/packages.nix { inherit pkgs; }; in
|
||||
shared-packages ++ [
|
||||
dockutil
|
||||
# Encryption and security tools
|
||||
pinentry_mac
|
||||
]
|
||||
|
254
flake.lock
generated
Normal file
254
flake.lock
generated
Normal file
@ -0,0 +1,254 @@
|
||||
{
|
||||
"nodes": {
|
||||
"brew-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1694443293,
|
||||
"narHash": "sha256-wBjbF2RRFyD4lN7ie98VnggmNBwAPv/dg2U+w5mUyuM=",
|
||||
"owner": "Homebrew",
|
||||
"repo": "brew",
|
||||
"rev": "4afb8e5602f3ecc9edf67a44257d8eceeaa8a108",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Homebrew",
|
||||
"ref": "4.1.11",
|
||||
"repo": "brew",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1700795494,
|
||||
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "LnL7",
|
||||
"ref": "master",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1687709756,
|
||||
"narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1702195734,
|
||||
"narHash": "sha256-MvQa1qT+10dqJyMKtACCpFOcFYIv9i/REek1bHaIhS4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "9a00befa13126e318fa4b895adeb84d383c9ab3f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"homebrew-bundle": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1700695605,
|
||||
"narHash": "sha256-Y9OJ9/BbGcfslER0hVToFobom/0Y5ynpkdEpQdfNF7s=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-bundle",
|
||||
"rev": "d6fbeee54ba344be59731ff3e93fb105b2567e34",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-bundle",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"homebrew-cask": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1702174207,
|
||||
"narHash": "sha256-P7mCkLiuqnnjfle3mDc0oFhQreubAnCP0DWKt3ksLDs=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask",
|
||||
"rev": "f9965c0cadc974f2b8706ecab78c5ff0972cd5a9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"homebrew-core": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1702193388,
|
||||
"narHash": "sha256-fqUIwK1YXIYGu3ZU1g/gRmfaOy8ZKyUgJhGSvSsYAyU=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-core",
|
||||
"rev": "75ca7b621f326dcafe2ff834e9cde10d354d7080",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-core",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1688307440,
|
||||
"narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=",
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-homebrew": {
|
||||
"inputs": {
|
||||
"brew-src": "brew-src",
|
||||
"flake-utils": "flake-utils",
|
||||
"nix-darwin": "nix-darwin",
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1695057498,
|
||||
"narHash": "sha256-wn3j7u5tOgLLbNxZC542rJiP5iX323m+CoGPMgPOxp4=",
|
||||
"owner": "zhaofengli-wip",
|
||||
"repo": "nix-homebrew",
|
||||
"rev": "6ab33c5e9249e74401144a7c667d96a757c5d341",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "zhaofengli-wip",
|
||||
"repo": "nix-homebrew",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1701718080,
|
||||
"narHash": "sha256-6ovz0pG76dE0P170pmmZex1wWcQoeiomUZGggfH9XPs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2c7f3c0fb7c08a0814627611d9d7d45ab6d75335",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1687274257,
|
||||
"narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=",
|
||||
"path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source",
|
||||
"rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1688049487,
|
||||
"narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1701718080,
|
||||
"narHash": "sha256-6ovz0pG76dE0P170pmmZex1wWcQoeiomUZGggfH9XPs=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2c7f3c0fb7c08a0814627611d9d7d45ab6d75335",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"darwin": "darwin",
|
||||
"home-manager": "home-manager",
|
||||
"homebrew-bundle": "homebrew-bundle",
|
||||
"homebrew-cask": "homebrew-cask",
|
||||
"homebrew-core": "homebrew-core",
|
||||
"nix-homebrew": "nix-homebrew",
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
39
flake.nix
39
flake.nix
@ -3,32 +3,7 @@
|
||||
description = "Starter Configuration for NixOS and MacOS";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:dustinlyons/nixpkgs/master";
|
||||
|
||||
# My nixpkgs fork includes a feather-font package (https://github.com/dustinlyons/feather-font)
|
||||
# and a timeout setting for Emacs daemon. If you don't want to use my it, follow these steps to use the official repo instead:
|
||||
#
|
||||
# Change the flake input
|
||||
# - Official repository
|
||||
# nixpkgs.url = "github:NixOS/nixpkgs/master";
|
||||
#
|
||||
# Remove this setting and retry builds if they sometimes timeout:
|
||||
# - NixOS configuration
|
||||
# https://github.com/dustinlyons/nixos-config/blob/8114714c10d61cd5da34df842dd5bac0301f688a/nixos/default.nix#L280
|
||||
#
|
||||
# Replace feather-font with another font:
|
||||
# - Rofi:
|
||||
# https://github.com/dustinlyons/nixos-config/blob/1290219734b53b26d9c20d13989846788462ff26/nixos/config/rofi/launcher.rasi#L42
|
||||
#
|
||||
# - Polybar:
|
||||
# https://github.com/dustinlyons/nixos-config/blob/1290219734b53b26d9c20d13989846788462ff26/nixos/home-manager.nix#L21
|
||||
# https://github.com/dustinlyons/nixos-config/blob/1290219734b53b26d9c20d13989846788462ff26/nixos/config/rofi/styles.rasi#L49
|
||||
# https://github.com/dustinlyons/nixos-config/blob/1290219734b53b26d9c20d13989846788462ff26/nixos/config/rofi/powermenu.rasi#L49
|
||||
# https://github.com/dustinlyons/nixos-config/blob/1290219734b53b26d9c20d13989846788462ff26/nixos/config/rofi/networkmenu.rasi#L49
|
||||
#
|
||||
# - Fonts:
|
||||
# https://github.com/dustinlyons/nixos-config/blob/1290219734b53b26d9c20d13989846788462ff26/nixos/default.nix#L286
|
||||
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
darwin = {
|
||||
url = "github:LnL7/nix-darwin/master";
|
||||
@ -48,13 +23,9 @@
|
||||
homebrew-cask = {
|
||||
url = "github:homebrew/homebrew-cask";
|
||||
flake = false;
|
||||
};
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
outputs = { self, darwin, nix-homebrew, homebrew-bundle, homebrew-core, homebrew-cask, home-manager, nixpkgs, disko } @inputs:
|
||||
outputs = { self, darwin, nix-homebrew, homebrew-bundle, homebrew-core, homebrew-cask, home-manager, nixpkgs } @inputs:
|
||||
let
|
||||
user = "dekker1";
|
||||
linuxSystems = [ "x86_64-linux" "aarch64-linux" ];
|
||||
@ -67,9 +38,8 @@
|
||||
in
|
||||
{
|
||||
default = with pkgs; mkShell {
|
||||
nativeBuildInputs = with pkgs; [ bashInteractive git age age-plugin-yubikey ];
|
||||
nativeBuildInputs = with pkgs; [ bashInteractive git ];
|
||||
shellHook = with pkgs; ''
|
||||
export EDITOR=vim
|
||||
'';
|
||||
};
|
||||
};
|
||||
@ -85,7 +55,7 @@
|
||||
home-manager.darwinModules.home-manager
|
||||
{
|
||||
nix-homebrew = {
|
||||
enable = true;
|
||||
enable = false;
|
||||
user = "${user}";
|
||||
taps = {
|
||||
"homebrew/homebrew-core" = homebrew-core;
|
||||
@ -104,7 +74,6 @@
|
||||
system = system;
|
||||
specialArgs = inputs;
|
||||
modules = [
|
||||
disko.nixosModules.disko
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
|
@ -3,7 +3,6 @@
|
||||
.
|
||||
├── config # Config files not written in Nix
|
||||
├── default.nix # Defines module, system-level config,
|
||||
├── disk-config.nix # Disks, partitions, and filesystems
|
||||
├── files.nix # Non-Nix, static configuration files (now immutable!)
|
||||
├── home-manager.nix # Defines user programs
|
||||
├── packages.nix # List of packages to install for NixOS
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 692 KiB |
@ -1,498 +0,0 @@
|
||||
;; ┌────────────────────────────────────────────────────┐
|
||||
;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▀▄░█▀█░█▀▄░█▀▀│
|
||||
;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█▀▄░█▀█░█▀▄░▀▀█│
|
||||
;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀░░▀░▀░▀░▀░▀▀▀│
|
||||
;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░│
|
||||
;; └────────────────────────────────────────────────────┘
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[bar]
|
||||
fill =
|
||||
empty =
|
||||
indicator = ⏽
|
||||
; Nerd font : , ⏽, 樂 籠 錄 , 雷 絛
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/volume]
|
||||
type = internal/alsa
|
||||
|
||||
; Soundcard to be used
|
||||
; Usually in the format hw:# where # is the card number
|
||||
; You can find the different card numbers in `/proc/asound/cards`
|
||||
master-soundcard = default
|
||||
speaker-soundcard = default
|
||||
headphone-soundcard = default
|
||||
|
||||
; Name of the master, speaker and headphone mixers
|
||||
; Use the following command to list available mixer controls:
|
||||
; $ amixer scontrols | sed -nr "s/.*'([[:alnum:]]+)'.*/\1/p"
|
||||
; If master, speaker or headphone-soundcard isn't the default,
|
||||
; use `amixer -c # scontrols` instead where # is the number
|
||||
; of the master, speaker or headphone soundcard respectively
|
||||
;
|
||||
; Default: Master
|
||||
master-mixer = Master
|
||||
|
||||
; Optionally define speaker and headphone mixers
|
||||
; Default: none
|
||||
;;speaker-mixer = Speaker
|
||||
; Default: none
|
||||
;;headphone-mixer = Headphone
|
||||
|
||||
; NOTE: This is required if headphone_mixer is defined
|
||||
; Use the following command to list available device controls
|
||||
; $ amixer controls | sed -r "/CARD/\!d; s/.*=([0-9]+).*name='([^']+)'.*/printf '%3.0f: %s\n' '\1' '\2'/e" | sort
|
||||
; You may also need to use `amixer -c # controls` as above for the mixer names
|
||||
; Default: none
|
||||
;;headphone-id = 9
|
||||
|
||||
; Use volume mapping (similar to amixer -M and alsamixer), where the increase in volume is linear to the ear
|
||||
; Default: false
|
||||
;;mapped = true
|
||||
|
||||
; Interval for volume increase/decrease (in percent points)
|
||||
; Default: 5
|
||||
interval = 5
|
||||
|
||||
; Available tags:
|
||||
; <label-volume> (default)
|
||||
; <ramp-volume>
|
||||
; <bar-volume>
|
||||
format-volume = <ramp-volume> <bar-volume>
|
||||
|
||||
; Available tags:
|
||||
; <label-muted> (default)
|
||||
; <ramp-volume>
|
||||
; <bar-volume>
|
||||
format-muted = <label-muted>
|
||||
format-muted-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
label-volume = %percentage%%
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default
|
||||
label-muted = " Muted"
|
||||
label-muted-foreground = ${color.foreground-alt}
|
||||
|
||||
; Only applies if <ramp-volume> is used
|
||||
ramp-volume-0 =
|
||||
ramp-volume-1 =
|
||||
ramp-volume-2 =
|
||||
|
||||
; Only applies if <bar-volume> is used
|
||||
bar-volume-width = 10
|
||||
bar-volume-gradient = false
|
||||
|
||||
bar-volume-indicator = ${bar.indicator}
|
||||
bar-volume-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-volume-fill = ${bar.fill}
|
||||
bar-volume-foreground-0 = ${color.foreground}
|
||||
bar-volume-foreground-1 = ${color.foreground}
|
||||
bar-volume-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-volume-empty = ${bar.empty}
|
||||
bar-volume-empty-foreground = ${color.foreground}
|
||||
|
||||
; If defined, it will replace <ramp-volume> when
|
||||
; headphones are plugged in to `headphone_control_numid`
|
||||
; If undefined, <ramp-volume> will be used for both
|
||||
; Only applies if <ramp-volume> is used
|
||||
ramp-headphones-0 =
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/brightness]
|
||||
;type = internal/xbacklight
|
||||
type = internal/backlight
|
||||
|
||||
; Use the following command to list available cards:
|
||||
; $ ls -1 /sys/class/backlight/
|
||||
;card = intel_backlight
|
||||
card = amdgpu_bl0
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
; <ramp>
|
||||
; <bar>
|
||||
format = <ramp> <bar>
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
label = %percentage%%
|
||||
|
||||
; Only applies if <ramp> is used
|
||||
ramp-0 =
|
||||
ramp-1 =
|
||||
ramp-2 =
|
||||
ramp-3 =
|
||||
ramp-4 =
|
||||
|
||||
; Only applies if <bar> is used
|
||||
bar-width = 10
|
||||
bar-gradient = false
|
||||
|
||||
bar-indicator = ${bar.indicator}
|
||||
bar-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-fill = ${bar.fill}
|
||||
bar-foreground-0 = ${color.foreground}
|
||||
bar-foreground-1 = ${color.foreground}
|
||||
bar-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-empty = ${bar.empty}
|
||||
bar-empty-foreground = ${color.foreground}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/battery_bar]
|
||||
type = internal/battery
|
||||
|
||||
; This is useful in case the battery never reports 100% charge
|
||||
full-at = 99
|
||||
|
||||
; Use the following command to list batteries and adapters:
|
||||
; $ ls -1 /sys/class/power_supply/
|
||||
battery = BAT1
|
||||
adapter = ACAD
|
||||
|
||||
; If an inotify event haven't been reported in this many
|
||||
; seconds, manually poll for new values.
|
||||
;
|
||||
; Needed as a fallback for systems that don't report events
|
||||
; on sysfs/procfs.
|
||||
;
|
||||
; Disable polling by setting the interval to 0.
|
||||
;
|
||||
; Default: 5
|
||||
poll-interval = 2
|
||||
|
||||
; see "man date" for details on how to format the time string
|
||||
; NOTE: if you want to use syntax tags here you need to use %%{...}
|
||||
; Default: %H:%M:%S
|
||||
time-format = %H:%M
|
||||
|
||||
; Available tags:
|
||||
; <label-charging> (default)
|
||||
; <bar-capacity>
|
||||
; <ramp-capacity>
|
||||
; <animation-charging>
|
||||
format-charging = <bar-capacity>
|
||||
format-charging-prefix = " "
|
||||
|
||||
; Available tags:
|
||||
; <label-discharging> (default)
|
||||
; <bar-capacity>
|
||||
; <ramp-capacity>
|
||||
; <animation-discharging>
|
||||
format-discharging = <bar-capacity>
|
||||
format-discharging-prefix = " "
|
||||
|
||||
; Available tags:
|
||||
; <label-full> (default)
|
||||
; <bar-capacity>
|
||||
; <ramp-capacity>
|
||||
format-full = <label-full>
|
||||
format-full-prefix = " "
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
; %time%
|
||||
; %consumption% (shows current charge rate in watts)
|
||||
|
||||
label-charging = %percentage%%
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
; %time%
|
||||
; %consumption% (shows current discharge rate in watts)
|
||||
label-discharging = %percentage%%
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
label-full = " Full"
|
||||
|
||||
; Only applies if <bar-capacity> is used
|
||||
bar-capacity-width = 10
|
||||
bar-capacity-gradient = false
|
||||
|
||||
bar-capacity-indicator = ${bar.indicator}
|
||||
bar-capacity-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-capacity-fill = ${bar.fill}
|
||||
bar-capacity-foreground-0 = ${color.foreground}
|
||||
bar-capacity-foreground-1 = ${color.foreground}
|
||||
bar-capacity-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-capacity-empty = ${bar.empty}
|
||||
bar-capacity-empty-foreground = ${color.foreground}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/cpu_bar]
|
||||
type = internal/cpu
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 1
|
||||
interval = 0.5
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
; <bar-load>
|
||||
; <ramp-load>
|
||||
; <ramp-coreload>
|
||||
;;format = <label> <ramp-coreload>
|
||||
format = <bar-load> <label>
|
||||
format-prefix = " "
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default) - total cpu load averaged over all cores
|
||||
; %percentage-sum% - Cumulative load on all cores
|
||||
; %percentage-cores% - load percentage for each core
|
||||
; %percentage-core[1-9]% - load percentage for specific core
|
||||
label = "%percentage%%"
|
||||
|
||||
; Only applies if <bar-load> is used
|
||||
bar-load-width = 10
|
||||
bar-load-gradient = false
|
||||
|
||||
bar-load-indicator = ${bar.indicator}
|
||||
bar-load-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-load-fill = ${bar.fill}
|
||||
bar-load-foreground-0 = ${color.foreground}
|
||||
bar-load-foreground-1 = ${color.foreground}
|
||||
bar-load-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-load-empty = ${bar.empty}
|
||||
bar-load-empty-foreground = ${color.foreground}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/filesystem_bar]
|
||||
type = internal/fs
|
||||
|
||||
; Mountpoints to display
|
||||
mount-0 = /
|
||||
;;mount-1 = /home
|
||||
;;mount-2 = /var
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 30
|
||||
interval = 30
|
||||
|
||||
; Display fixed precision values
|
||||
; Default: false
|
||||
fixed-values = false
|
||||
|
||||
; Spacing between entries
|
||||
; Default: 2
|
||||
;;spacing = 4
|
||||
|
||||
; Available tags:
|
||||
; <label-mounted> (default)
|
||||
; <bar-free>
|
||||
; <bar-used>
|
||||
; <ramp-capacity>
|
||||
format-mounted = <bar-used> <label-mounted>
|
||||
format-mounted-prefix = " "
|
||||
|
||||
; Available tags:
|
||||
; <label-unmounted> (default)
|
||||
format-unmounted = <label-unmounted>
|
||||
format-unmounted-prefix = " "
|
||||
|
||||
; Available tokens:
|
||||
; %mountpoint%
|
||||
; %type%
|
||||
; %fsname%
|
||||
; %percentage_free%
|
||||
; %percentage_used%
|
||||
; %total%
|
||||
; %free%
|
||||
; %used%
|
||||
; Default: %mountpoint% %percentage_free%%
|
||||
label-mounted = %used%/%total%
|
||||
|
||||
; Available tokens:
|
||||
; %mountpoint%
|
||||
; Default: %mountpoint% is not mounted
|
||||
label-unmounted = "%mountpoint%: not mounted"
|
||||
|
||||
; Only applies if <bar-used> is used
|
||||
bar-used-width = 10
|
||||
bar-used-gradient = false
|
||||
|
||||
bar-used-indicator = ${bar.indicator}
|
||||
bar-used-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-used-fill = ${bar.fill}
|
||||
bar-used-foreground-0 = ${color.foreground}
|
||||
bar-used-foreground-1 = ${color.foreground}
|
||||
bar-used-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-used-empty = ${bar.empty}
|
||||
bar-used-empty-foreground = ${color.foreground}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/memory_bar]
|
||||
type = internal/memory
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 1
|
||||
interval = 2
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
; <bar-used>
|
||||
; <bar-free>
|
||||
; <ramp-used>
|
||||
; <ramp-free>
|
||||
; <bar-swap-used>
|
||||
; <bar-swap-free>
|
||||
; <ramp-swap-used>
|
||||
; <ramp-swap-free>
|
||||
format = <bar-used> <label>
|
||||
format-prefix = " "
|
||||
|
||||
; Available tokens:
|
||||
; %percentage_used% (default)
|
||||
; %percentage_free%
|
||||
; %gb_used%
|
||||
; %gb_free%
|
||||
; %gb_total%
|
||||
; %mb_used%
|
||||
; %mb_free%
|
||||
; %mb_total%
|
||||
; %percentage_swap_used%
|
||||
; %percentage_swap_free%
|
||||
; %mb_swap_total%
|
||||
; %mb_swap_free%
|
||||
; %mb_swap_used%
|
||||
; %gb_swap_total%
|
||||
; %gb_swap_free%
|
||||
; %gb_swap_used%
|
||||
|
||||
label = "%mb_used%"
|
||||
|
||||
; Only applies if <bar-used> is used
|
||||
bar-used-width = 10
|
||||
bar-used-gradient = false
|
||||
|
||||
bar-used-indicator = ${bar.indicator}
|
||||
bar-used-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-used-fill = ${bar.fill}
|
||||
bar-used-foreground-0 = ${color.foreground}
|
||||
bar-used-foreground-1 = ${color.foreground}
|
||||
bar-used-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-used-empty = ${bar.empty}
|
||||
bar-used-empty-foreground = ${color.foreground}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/mpd_bar]
|
||||
type = internal/mpd
|
||||
|
||||
; Host where mpd is running (either ip or domain name)
|
||||
; Can also be the full path to a unix socket where mpd is running.
|
||||
;;host = 127.0.0.1
|
||||
;;port = 6600
|
||||
;;password = mysecretpassword
|
||||
|
||||
; Seconds to sleep between progressbar/song timer sync
|
||||
; Default: 1
|
||||
interval = 1
|
||||
|
||||
; Available tags:
|
||||
; <label-song> (default)
|
||||
; <label-time>
|
||||
; <bar-progress>
|
||||
; <toggle> - gets replaced with <icon-(pause|play)>
|
||||
; <toggle-stop> - gets replaced with <icon-(stop|play)>
|
||||
; <icon-random>
|
||||
; <icon-repeat>
|
||||
; <icon-repeatone> (deprecated)
|
||||
; <icon-single> - Toggle playing only a single song. Replaces <icon-repeatone>
|
||||
; <icon-consume>
|
||||
; <icon-prev>
|
||||
; <icon-stop>
|
||||
; <icon-play>
|
||||
; <icon-pause>
|
||||
; <icon-next>
|
||||
; <icon-seekb>
|
||||
; <icon-seekf>
|
||||
format-online = <label-song> <bar-progress> <label-time>
|
||||
format-online-prefix =
|
||||
|
||||
;format-playing = ${self.format-online}
|
||||
;format-paused = ${self.format-online}
|
||||
;format-stopped = ${self.format-online}
|
||||
|
||||
; Available tags:
|
||||
; <label-offline>
|
||||
format-offline = <label-offline>
|
||||
format-offline-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %artist%
|
||||
; %album-artist%
|
||||
; %album%
|
||||
; %date%
|
||||
; %title%
|
||||
; Default: %artist% - %title%
|
||||
label-song = " %artist% - %title%"
|
||||
label-song-maxlen = 25
|
||||
label-song-ellipsis = true
|
||||
|
||||
; Available tokens:
|
||||
; %elapsed%
|
||||
; %total%
|
||||
; Default: %elapsed% / %total%
|
||||
label-time = %elapsed% / %total%
|
||||
|
||||
; Available tokens:
|
||||
; None
|
||||
label-offline = " Offline"
|
||||
|
||||
; Only applies if <icon-X> is used
|
||||
icon-play =
|
||||
icon-pause =
|
||||
icon-stop =
|
||||
icon-next =
|
||||
icon-prev =
|
||||
icon-seekf =
|
||||
icon-seekb =
|
||||
icon-random =
|
||||
icon-repeat =
|
||||
icon-repeatone =
|
||||
icon-single =
|
||||
icon-consume =
|
||||
|
||||
; Used to display the state of random/repeat/repeatone/single
|
||||
; Only applies if <icon-[random|repeat|repeatone|single]> is used
|
||||
toggle-on-foreground = ${color.primary}
|
||||
toggle-off-foreground = ${color.secondary}
|
||||
|
||||
; Only applies if <bar-progress> is used
|
||||
bar-progress-width = 10
|
||||
bar-progress-gradient = false
|
||||
|
||||
bar-progress-indicator = ${bar.indicator}
|
||||
bar-progress-indicator-foreground = ${color.foreground}
|
||||
|
||||
bar-progress-fill = ${bar.fill}
|
||||
bar-progress-foreground-0 = ${color.foreground}
|
||||
bar-progress-foreground-1 = ${color.foreground}
|
||||
bar-progress-foreground-2 = ${color.foreground}
|
||||
|
||||
bar-progress-empty = ${bar.empty}
|
||||
bar-progress-empty-foreground = ${color.foreground}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
@ -1,9 +0,0 @@
|
||||
[color]
|
||||
|
||||
background = #1F1F1F
|
||||
foreground = #FFFFFF
|
||||
foreground-alt = #8F8F8F
|
||||
module-fg = #FFFFFF
|
||||
primary = #546e7a
|
||||
secondary = #E53935
|
||||
alternate = #7cb342
|
@ -1,215 +0,0 @@
|
||||
[global/wm]
|
||||
; Adjust the _NET_WM_STRUT_PARTIAL top value
|
||||
; Used for top aligned bars
|
||||
margin-bottom = 0
|
||||
|
||||
; Adjust the _NET_WM_STRUT_PARTIAL bottom value
|
||||
; Used for bottom aligned bars
|
||||
margin-top = 0
|
||||
|
||||
;; Bar Settings
|
||||
|
||||
[bar/main]
|
||||
; Use either of the following command to list available outputs:
|
||||
; If unspecified, the application will pick the first one it finds.
|
||||
; $ polybar -m | cut -d ':' -f 1
|
||||
; $ xrandr -q | grep " connected" | cut -d ' ' -f1
|
||||
monitor =
|
||||
|
||||
; Use the specified monitor as a fallback if the main one is not found.
|
||||
monitor-fallback =
|
||||
|
||||
; Require the monitor to be in connected state
|
||||
; XRandR sometimes reports my monitor as being disconnected (when in use)
|
||||
monitor-strict = false
|
||||
|
||||
; Tell the Window Manager not to configure the window.
|
||||
; Use this to detach the bar if your WM is locking its size/position.
|
||||
override-redirect = false
|
||||
|
||||
; Put the bar at the bottom of the screen
|
||||
bottom = false
|
||||
|
||||
; Prefer fixed center position for the `modules-center` block
|
||||
; When false, the center position will be based on the size of the other blocks.
|
||||
fixed-center = true
|
||||
|
||||
; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%),
|
||||
; the percentage can optionally be extended with a pixel offset like so:
|
||||
; 50%:-10, this will result in a width or height of 50% minus 10 pixels
|
||||
width = 98%
|
||||
height = 40
|
||||
|
||||
; Offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
|
||||
; the percentage can optionally be extended with a pixel offset like so:
|
||||
; 50%:-10, this will result in an offset in the x or y direction
|
||||
; of 50% minus 10 pixels
|
||||
offset-x = 1%
|
||||
offset-y = 2%:-12
|
||||
|
||||
; Background ARGB color (e.g. #f00, #ff992a, #ddff1023)
|
||||
background = ${color.background}
|
||||
|
||||
; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023)
|
||||
foreground = ${color.foreground}
|
||||
|
||||
; Value used for drawing rounded corners
|
||||
; Individual top/bottom values can be defined using:
|
||||
; radius-{top,bottom}
|
||||
radius-top = 2.0
|
||||
radius-bottom = 2.0
|
||||
|
||||
; Under-/overline pixel size and argb color
|
||||
; Individual values can be defined using:
|
||||
; {overline,underline}-size
|
||||
; {overline,underline}-color
|
||||
line-size = 2
|
||||
line-color = ${color.primary}
|
||||
|
||||
; Values applied to all borders
|
||||
; Individual side values can be defined using:
|
||||
; border-{left,top,right,bottom}-size
|
||||
; border-{left,top,right,bottom}-color
|
||||
border-bottom-size = 0
|
||||
border-bottom-color = ${color.primary}
|
||||
|
||||
; Number of spaces to add at the beginning/end of the bar
|
||||
; Individual side values can be defined using:
|
||||
; padding-{left,right}
|
||||
padding = 0
|
||||
|
||||
; Number of spaces to add before/after each module
|
||||
; Individual side values can be defined using:
|
||||
; module-margin-{left,right}
|
||||
module-margin-left = 2
|
||||
module-margin-right = 2
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
; Fonts
|
||||
font-0 = "@font0@"
|
||||
font-1 = "@font1@"
|
||||
|
||||
; Modules
|
||||
modules-left = launcher workspaces
|
||||
modules-center = date popup-calendar
|
||||
modules-right = pulseaudio memory cpu updates sysmenu
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
; The separator will be inserted between the output of each module
|
||||
separator =
|
||||
|
||||
; Opacity value between 0.0 and 1.0 used on fade in/out
|
||||
dim-value = 1.0
|
||||
|
||||
; Value to be used to set the WM_NAME atom
|
||||
; If the value is empty or undefined, the atom value
|
||||
; will be created from the following template: polybar-[BAR]_[MONITOR]
|
||||
wm-name = bspwm
|
||||
|
||||
; Locale used to localize various module data (e.g. date)
|
||||
; Expects a valid libc locale, for example: sv_SE.UTF-8
|
||||
locale =
|
||||
|
||||
; Position of the system tray window
|
||||
; If empty or undefined, tray support will be disabled
|
||||
; NOTE: A center aligned tray will cover center aligned modules
|
||||
;
|
||||
; Available positions:
|
||||
; left
|
||||
; center
|
||||
; right
|
||||
; none
|
||||
tray-position = none
|
||||
|
||||
; If true, the bar will not shift its
|
||||
; contents when the tray changes
|
||||
tray-detached = false
|
||||
|
||||
; Tray icon max size
|
||||
tray-maxsize = 16
|
||||
|
||||
; Background color for the tray container
|
||||
; ARGB color (e.g. #f00, #ff992a, #ddff1023)
|
||||
; By default the tray container will use the bar
|
||||
; background color.
|
||||
tray-background = ${color.background}
|
||||
|
||||
; Tray offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
|
||||
tray-offset-x = 0
|
||||
tray-offset-y = 0
|
||||
|
||||
; Pad the sides of each tray icon
|
||||
tray-padding = 0
|
||||
|
||||
; Scale factor for tray clients
|
||||
tray-scale = 1.0
|
||||
|
||||
; Restack the bar window and put it above the
|
||||
; selected window manager's root
|
||||
;
|
||||
; Fixes the issue where the bar is being drawn
|
||||
; on top of fullscreen window's
|
||||
;
|
||||
; Available options:
|
||||
; bspwm
|
||||
; i3 (requires: `override-redirect = true`)
|
||||
wm-restack = bspwm
|
||||
|
||||
; Set a DPI values used when rendering text
|
||||
; This only affects scalable fonts
|
||||
; dpi =
|
||||
|
||||
; Enable support for inter-process messaging
|
||||
; See the Messaging wiki page for more details.
|
||||
enable-ipc = true
|
||||
|
||||
; Fallback click handlers that will be called if
|
||||
; there's no matching module handler found.
|
||||
click-left =
|
||||
click-middle = bspc desktop -l next
|
||||
click-right =
|
||||
double-click-left =
|
||||
double-click-middle =
|
||||
double-click-right =
|
||||
|
||||
; Requires polybar to be built with xcursor support (xcb-util-cursor)
|
||||
; Possible values are:
|
||||
; - default : The default pointer as before, can also be an empty string (default)
|
||||
; - pointer : Typically in the form of a hand
|
||||
; - ns-resize : Up and down arrows, can be used to indicate scrolling
|
||||
cursor-click =
|
||||
cursor-scroll =
|
||||
|
||||
; bspwm
|
||||
scroll-up = bspc desktop -f prev.local
|
||||
scroll-down = bspc desktop -f next.local
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
;; Application Settings
|
||||
|
||||
[settings]
|
||||
; The throttle settings lets the eventloop swallow up til X events
|
||||
; if they happen within Y millisecond after first event was received.
|
||||
throttle-output = 5
|
||||
throttle-output-for = 10
|
||||
|
||||
; Time in milliseconds that the input handler will wait between processing events
|
||||
;throttle-input-for = 30
|
||||
|
||||
; Reload upon receiving XCB_RANDR_SCREEN_CHANGE_NOTIFY events
|
||||
screenchange-reload = false
|
||||
|
||||
; Compositing operators
|
||||
; @see: https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t
|
||||
compositing-background = source
|
||||
compositing-foreground = over
|
||||
compositing-overline = over
|
||||
compositing-underline = over
|
||||
compositing-border = over
|
||||
|
||||
; Enables pseudo-transparency for the bar
|
||||
; If set to true the bar can be transparent without a compositor.
|
||||
pseudo-transparency = false
|
@ -1,674 +0,0 @@
|
||||
;; ┌────────────────────────────────────────────────────────────────┐
|
||||
;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█▄█░█▀█░█▀▄░█░█░█░░░█▀▀░█▀▀│
|
||||
;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░█░█░█░█░█░█░█░█░░░█▀▀░▀▀█│
|
||||
;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀░▀░▀▀▀░▀▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀│
|
||||
;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
|
||||
;; └────────────────────────────────────────────────────────────────┘
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/alsa]
|
||||
type = internal/alsa
|
||||
|
||||
; Soundcard to be used
|
||||
; Usually in the format hw:# where # is the card number
|
||||
; You can find the different card numbers in `/proc/asound/cards`
|
||||
master-soundcard = default
|
||||
speaker-soundcard = default
|
||||
headphone-soundcard = default
|
||||
|
||||
; Name of the master, speaker and headphone mixers
|
||||
; Use the following command to list available mixer controls:
|
||||
; $ amixer scontrols | sed -nr "s/.*'([[:alnum:]]+)'.*/\1/p"
|
||||
; If master, speaker or headphone-soundcard isn't the default,
|
||||
; use `amixer -c # scontrols` instead where # is the number
|
||||
; of the master, speaker or headphone soundcard respectively
|
||||
;
|
||||
; Default: Master
|
||||
master-mixer = Master
|
||||
|
||||
; Optionally define speaker and headphone mixers
|
||||
; Default: none
|
||||
;;speaker-mixer = Speaker
|
||||
; Default: none
|
||||
;;headphone-mixer = Headphone
|
||||
|
||||
; NOTE: This is required if headphone_mixer is defined
|
||||
; Use the following command to list available device controls
|
||||
; $ amixer controls | sed -r "/CARD/\!d; s/.*=([0-9]+).*name='([^']+)'.*/printf '%3.0f: %s\n' '\1' '\2'/e" | sort
|
||||
; You may also need to use `amixer -c # controls` as above for the mixer names
|
||||
; Default: none
|
||||
;;headphone-id = 9
|
||||
|
||||
; Use volume mapping (similar to amixer -M and alsamixer), where the increase in volume is linear to the ear
|
||||
; Default: false
|
||||
;;mapped = true
|
||||
|
||||
; Interval for volume increase/decrease (in percent points)
|
||||
; Default: 5
|
||||
interval = 5
|
||||
|
||||
; Available tags:
|
||||
; <label-volume> (default)
|
||||
; <ramp-volume>
|
||||
; <bar-volume>
|
||||
format-volume = <ramp-volume> <label-volume>
|
||||
|
||||
; Available tags:
|
||||
; <label-muted> (default)
|
||||
; <ramp-volume>
|
||||
; <bar-volume>
|
||||
format-muted = <label-muted>
|
||||
format-muted-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
label-volume = %percentage%%
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default
|
||||
label-muted = " Muted"
|
||||
label-muted-foreground = ${color.foreground-alt}
|
||||
|
||||
; Only applies if <ramp-volume> is used
|
||||
ramp-volume-0 =
|
||||
ramp-volume-1 =
|
||||
ramp-volume-2 =
|
||||
|
||||
; If defined, it will replace <ramp-volume> when
|
||||
; headphones are plugged in to `headphone_control_numid`
|
||||
; If undefined, <ramp-volume> will be used for both
|
||||
; Only applies if <ramp-volume> is used
|
||||
ramp-headphones-0 =
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 1
|
||||
interval = 1
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
; <bar-load>
|
||||
; <ramp-load>
|
||||
; <ramp-coreload>
|
||||
;;format = <label> <ramp-coreload>
|
||||
format = <label>
|
||||
format-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default) - total cpu load averaged over all cores
|
||||
; %percentage-sum% - Cumulative load on all cores
|
||||
; %percentage-cores% - load percentage for each core
|
||||
; %percentage-core[1-9]% - load percentage for specific core
|
||||
label = " %percentage%%"
|
||||
|
||||
; Spacing between individual per-core ramps
|
||||
;;ramp-coreload-spacing = 1
|
||||
;;ramp-coreload-0 = ${cpu.load0}
|
||||
;;ramp-coreload-1 = ${cpu.load1}
|
||||
|
||||
;;ramp-load-0 = ${cpu.load0}
|
||||
;;ramp-load-1 = ${cpu.load1}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/date]
|
||||
type = internal/date
|
||||
|
||||
; Seconds to sleep between updates
|
||||
interval = 1.0
|
||||
|
||||
; See "http://en.cppreference.com/w/cpp/io/manip/put_time" for details on how to format the date string
|
||||
; NOTE: if you want to use syntax tags here you need to use %%{...}
|
||||
;;date = %Y-%m-%d%
|
||||
|
||||
; Optional time format
|
||||
time = " %I:%M %p"
|
||||
|
||||
; if `date-alt` or `time-alt` is defined, clicking
|
||||
; the module will toggle between formats
|
||||
;;date-alt = %A, %d %B %Y
|
||||
#time-alt = " %a, %d %b %Y"
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
format = <label>
|
||||
|
||||
; Available tokens:
|
||||
; %date%
|
||||
; %time%
|
||||
; Default: %date%
|
||||
label = %time%
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/filesystem]
|
||||
type = internal/fs
|
||||
|
||||
; Mountpoints to display
|
||||
mount-0 = /
|
||||
;;mount-1 = /home
|
||||
;;mount-2 = /var
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 30
|
||||
interval = 30
|
||||
|
||||
; Display fixed precision values
|
||||
; Default: false
|
||||
fixed-values = true
|
||||
|
||||
; Spacing between entries
|
||||
; Default: 2
|
||||
;;spacing = 4
|
||||
|
||||
; Available tags:
|
||||
; <label-mounted> (default)
|
||||
; <bar-free>
|
||||
; <bar-used>
|
||||
; <ramp-capacity>
|
||||
format-mounted = <label-mounted>
|
||||
format-mounted-prefix =
|
||||
|
||||
; Available tags:
|
||||
; <label-unmounted> (default)
|
||||
format-unmounted = <label-unmounted>
|
||||
format-unmounted-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %mountpoint%
|
||||
; %type%
|
||||
; %fsname%
|
||||
; %percentage_free%
|
||||
; %percentage_used%
|
||||
; %total%
|
||||
; %free%
|
||||
; %used%
|
||||
; Default: %mountpoint% %percentage_free%%
|
||||
label-mounted = " %free%"
|
||||
|
||||
; Available tokens:
|
||||
; %mountpoint%
|
||||
; Default: %mountpoint% is not mounted
|
||||
label-unmounted = " %mountpoint%: not mounted"
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 1
|
||||
interval = 1
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
; <bar-used>
|
||||
; <bar-free>
|
||||
; <ramp-used>
|
||||
; <ramp-free>
|
||||
; <bar-swap-used>
|
||||
; <bar-swap-free>
|
||||
; <ramp-swap-used>
|
||||
; <ramp-swap-free>
|
||||
format = <label>
|
||||
format-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %percentage_used% (default)
|
||||
; %percentage_free%
|
||||
; %gb_used%
|
||||
; %gb_free%
|
||||
; %gb_total%
|
||||
; %mb_used%
|
||||
; %mb_free%
|
||||
; %mb_total%
|
||||
; %percentage_swap_used%
|
||||
; %percentage_swap_free%
|
||||
; %mb_swap_total%
|
||||
; %mb_swap_free%
|
||||
; %mb_swap_used%
|
||||
; %gb_swap_total%
|
||||
; %gb_swap_free%
|
||||
; %gb_swap_used%
|
||||
|
||||
label = " %mb_used%"
|
||||
|
||||
; Only applies if <ramp-used> is used
|
||||
;;ramp-used-0 = ${memory.used0}
|
||||
;;ramp-used-1 = ${memory.used1}
|
||||
;;ramp-used-2 = ${memory.used2}
|
||||
|
||||
; Only applies if <ramp-free> is used
|
||||
;;ramp-free-0 = ${memory.free0}
|
||||
;;ramp-free-1 = ${memory.free1}
|
||||
;;ramp-free-2 = ${memory.free2}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/mpd]
|
||||
type = internal/mpd
|
||||
|
||||
; Host where mpd is running (either ip or domain name)
|
||||
; Can also be the full path to a unix socket where mpd is running.
|
||||
;;host = 127.0.0.1
|
||||
;;port = 6600
|
||||
;;password = mysecretpassword
|
||||
|
||||
; Seconds to sleep between progressbar/song timer sync
|
||||
; Default: 1
|
||||
interval = 1
|
||||
|
||||
; Available tags:
|
||||
; <label-song> (default)
|
||||
; <label-time>
|
||||
; <bar-progress>
|
||||
; <toggle> - gets replaced with <icon-(pause|play)>
|
||||
; <toggle-stop> - gets replaced with <icon-(stop|play)>
|
||||
; <icon-random>
|
||||
; <icon-repeat>
|
||||
; <icon-repeatone> (deprecated)
|
||||
; <icon-single> - Toggle playing only a single song. Replaces <icon-repeatone>
|
||||
; <icon-consume>
|
||||
; <icon-prev>
|
||||
; <icon-stop>
|
||||
; <icon-play>
|
||||
; <icon-pause>
|
||||
; <icon-next>
|
||||
; <icon-seekb>
|
||||
; <icon-seekf>
|
||||
format-online = <label-song> <icon-prev> <toggle> <icon-next>
|
||||
format-online-prefix =
|
||||
|
||||
;format-playing = ${self.format-online}
|
||||
;format-paused = ${self.format-online}
|
||||
;format-stopped = ${self.format-online}
|
||||
|
||||
; Available tags:
|
||||
; <label-offline>
|
||||
format-offline = <label-offline>
|
||||
format-offline-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %artist%
|
||||
; %album-artist%
|
||||
; %album%
|
||||
; %date%
|
||||
; %title%
|
||||
; Default: %artist% - %title%
|
||||
label-song = " %artist% - %title%"
|
||||
label-song-maxlen = 25
|
||||
label-song-ellipsis = true
|
||||
|
||||
; Available tokens:
|
||||
; %elapsed%
|
||||
; %total%
|
||||
; Default: %elapsed% / %total%
|
||||
label-time = %elapsed% / %total%
|
||||
|
||||
; Available tokens:
|
||||
; None
|
||||
label-offline = " Offline"
|
||||
|
||||
; Only applies if <icon-X> is used
|
||||
icon-play =
|
||||
icon-pause =
|
||||
icon-stop =
|
||||
icon-next =
|
||||
icon-prev =
|
||||
icon-seekf =
|
||||
icon-seekb =
|
||||
icon-random =
|
||||
icon-repeat =
|
||||
icon-repeatone =
|
||||
icon-single =
|
||||
icon-consume =
|
||||
|
||||
; Used to display the state of random/repeat/repeatone/single
|
||||
; Only applies if <icon-[random|repeat|repeatone|single]> is used
|
||||
toggle-on-foreground = ${color.primary}
|
||||
toggle-off-foreground = ${color.secondary}
|
||||
|
||||
; Only applies if <bar-progress> is used
|
||||
;;bar-progress-width = 45
|
||||
;;bar-progress-indicator = |
|
||||
;;bar-progress-fill = ─
|
||||
;;bar-progress-empty = ─
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
; If you use both a wired and a wireless network, just add 2 module definitions. For example
|
||||
[module/wired-network]
|
||||
type = internal/network
|
||||
interface = eth0
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 1
|
||||
interval = 1.0
|
||||
|
||||
; Test connectivity every Nth update
|
||||
; A value of 0 disables the feature
|
||||
; NOTE: Experimental (needs more testing)
|
||||
; Default: 0
|
||||
;ping-interval = 3
|
||||
|
||||
; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%)
|
||||
; Minimum output width of upload/download rate
|
||||
; Default: 3
|
||||
;;udspeed-minwidth = 5
|
||||
|
||||
; Accumulate values from all interfaces
|
||||
; when querying for up/downspeed rate
|
||||
; Default: false
|
||||
accumulate-stats = true
|
||||
|
||||
; Consider an `UNKNOWN` interface state as up.
|
||||
; Some devices have an unknown state, even when they're running
|
||||
; Default: false
|
||||
unknown-as-up = true
|
||||
|
||||
; Available tags:
|
||||
; <label-connected> (default)
|
||||
; <ramp-signal>
|
||||
format-connected = <label-connected>
|
||||
format-connected-prefix =
|
||||
|
||||
; Available tags:
|
||||
; <label-disconnected> (default)
|
||||
format-disconnected = <label-disconnected>
|
||||
format-disconnected-prefix =
|
||||
|
||||
; Available tags:
|
||||
; <label-connected> (default)
|
||||
; <label-packetloss>
|
||||
; <animation-packetloss>
|
||||
;;format-packetloss = <animation-packetloss> <label-connected>
|
||||
|
||||
; Available tokens:
|
||||
; %ifname% [wireless+wired]
|
||||
; %local_ip% [wireless+wired]
|
||||
; %local_ip6% [wireless+wired]
|
||||
; %essid% [wireless]
|
||||
; %signal% [wireless]
|
||||
; %upspeed% [wireless+wired]
|
||||
; %downspeed% [wireless+wired]
|
||||
; %linkspeed% [wired]
|
||||
; Default: %ifname% %local_ip%
|
||||
label-connected = "%{A1:networkmanager_dmenu &:} %essid%%{A}"
|
||||
|
||||
; Available tokens:
|
||||
; %ifname% [wireless+wired]
|
||||
; Default: (none)
|
||||
label-disconnected = "%{A1:networkmanager_dmenu &:} Offline%{A}"
|
||||
;;label-disconnected-foreground = #66ffffff
|
||||
|
||||
; Available tokens:
|
||||
; %ifname% [wireless+wired]
|
||||
; %local_ip% [wireless+wired]
|
||||
; %local_ip6% [wireless+wired]
|
||||
; %essid% [wireless]
|
||||
; %signal% [wireless]
|
||||
; %upspeed% [wireless+wired]
|
||||
; %downspeed% [wireless+wired]
|
||||
; %linkspeed% [wired]
|
||||
; Default: (none)
|
||||
;label-packetloss = %essid%
|
||||
;label-packetloss-foreground = #eefafafa
|
||||
|
||||
; Only applies if <ramp-signal> is used
|
||||
ramp-signal-0 =
|
||||
ramp-signal-1 =
|
||||
ramp-signal-2 =
|
||||
|
||||
; Only applies if <animation-packetloss> is used
|
||||
;;animation-packetloss-0 = ⚠
|
||||
;;animation-packetloss-0-foreground = #ffa64c
|
||||
;;animation-packetloss-1 = ⚠
|
||||
;;animation-packetloss-1-foreground = #000000
|
||||
; Framerate in milliseconds
|
||||
;;animation-packetloss-framerate = 500
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/pulseaudio]
|
||||
type = internal/pulseaudio
|
||||
|
||||
; Sink to be used, if it exists (find using `pacmd list-sinks`, name field)
|
||||
; If not, uses default sink
|
||||
; sink = @pulseaudiosink@
|
||||
|
||||
; Use PA_VOLUME_UI_MAX (~153%) if true, or PA_VOLUME_NORM (100%) if false
|
||||
; Default: true
|
||||
use-ui-max = false
|
||||
|
||||
; Interval for volume increase/decrease (in percent points)
|
||||
; Default: 5
|
||||
interval = 5
|
||||
|
||||
; Available tags:
|
||||
; <label-volume> (default)
|
||||
; <ramp-volume>
|
||||
; <bar-volume>
|
||||
format-volume = <ramp-volume> <label-volume>
|
||||
|
||||
; Available tags:
|
||||
; <label-muted> (default)
|
||||
; <ramp-volume>
|
||||
; <bar-volume>
|
||||
format-muted = <label-muted>
|
||||
format-muted-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default)
|
||||
label-volume = %percentage%%
|
||||
|
||||
; Available tokens:
|
||||
; %percentage% (default
|
||||
label-muted = " Muted"
|
||||
label-muted-foreground = ${color.foreground-alt}
|
||||
|
||||
; Only applies if <ramp-volume> is used
|
||||
ramp-volume-0 =
|
||||
ramp-volume-1 =
|
||||
ramp-volume-2 =
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/temperature]
|
||||
type = internal/temperature
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 1
|
||||
interval = 0.5
|
||||
|
||||
; Thermal zone to use
|
||||
; To list all the zone types, run
|
||||
; $ for i in /sys/class/thermal/thermal_zone*; do echo "$i: $(<$i/type)"; done
|
||||
; Default: 0
|
||||
thermal-zone = 0
|
||||
|
||||
; Full path of temperature sysfs path
|
||||
; Use `sensors` to find preferred temperature source, then run
|
||||
; $ for i in /sys/class/hwmon/hwmon*/temp*_input; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)"; done
|
||||
; to find path to desired file
|
||||
; Default reverts to thermal zone setting
|
||||
;;hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
|
||||
hwmon-path = /sys/devices/pci0000:00/0000:00:01.3/0000:01:00.0/hwmon/hwmon0/temp1_input
|
||||
|
||||
; Threshold temperature to display warning label (in degrees celsius)
|
||||
; Default: 80
|
||||
warn-temperature = 65
|
||||
|
||||
; Whether or not to show units next to the temperature tokens (°C, °F)
|
||||
; Default: true
|
||||
units = true
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
; <ramp>
|
||||
format = <ramp> <label>
|
||||
|
||||
; Available tags:
|
||||
; <label-warn> (default)
|
||||
; <ramp>
|
||||
format-warn = <ramp> <label-warn>
|
||||
|
||||
; Available tokens:
|
||||
; %temperature% (deprecated)
|
||||
; %temperature-c% (default, temperature in °C)
|
||||
; %temperature-f% (temperature in °F)
|
||||
label = %temperature-c%
|
||||
|
||||
; Available tokens:
|
||||
; %temperature% (deprecated)
|
||||
; %temperature-c% (default, temperature in °C)
|
||||
; %temperature-f% (temperature in °F)
|
||||
label-warn = "%temperature-c%"
|
||||
label-warn-foreground = ${color.secondary}
|
||||
|
||||
; Requires the <ramp> tag
|
||||
; The icon selection will range from 0 to `warn-temperature`
|
||||
; with the current temperature as index.
|
||||
ramp-0 =
|
||||
ramp-1 =
|
||||
ramp-2 =
|
||||
ramp-3 =
|
||||
ramp-4 =
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/keyboard]
|
||||
type = internal/xkeyboard
|
||||
|
||||
; List of indicators to ignore
|
||||
blacklist-0 = num lock
|
||||
blacklist-1 = scroll lock
|
||||
|
||||
; Available tags:
|
||||
; <label-layout> (default)
|
||||
; <label-indicator> (default)
|
||||
format = <label-layout> <label-indicator>
|
||||
format-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %layout%
|
||||
; %name%
|
||||
; %number%
|
||||
; Default: %layout%
|
||||
label-layout = " %layout%"
|
||||
|
||||
; Available tokens:
|
||||
; %name%
|
||||
; Default: %name%
|
||||
label-indicator-on = %name%
|
||||
label-indicator-on-foreground = ${color.primary}
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/title]
|
||||
type = internal/xwindow
|
||||
|
||||
; Available tags:
|
||||
; <label> (default)
|
||||
format = <label>
|
||||
format-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %title%
|
||||
; Default: %title%
|
||||
label = " %title%"
|
||||
label-maxlen = 30
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/workspaces]
|
||||
type = internal/xworkspaces
|
||||
|
||||
; Only show workspaces defined on the same output as the bar
|
||||
;
|
||||
; Useful if you want to show monitor specific workspaces
|
||||
; on different bars
|
||||
;
|
||||
; Default: false
|
||||
pin-workspaces = true
|
||||
|
||||
; Create click handler used to focus desktop
|
||||
; Default: true
|
||||
enable-click = true
|
||||
|
||||
; Create scroll handlers used to cycle desktops
|
||||
; Default: true
|
||||
enable-scroll = true
|
||||
|
||||
; icon-[0-9]+ = <desktop-name>;<icon>
|
||||
; NOTE: The desktop name needs to match the name configured by the WM
|
||||
; You can get a list of the defined desktops using:
|
||||
; $ xprop -root _NET_DESKTOP_NAMES
|
||||
|
||||
; Emacs, Calendar, News (General)
|
||||
icon-0 = 1;
|
||||
; Terminal, Emacs (IDE)
|
||||
icon-1 = 2;
|
||||
; Slack, Dev Tools Browser
|
||||
icon-2 = 3;
|
||||
; Chat, News (Financial)
|
||||
icon-3 = 4;
|
||||
; Apple Music, Media
|
||||
icon-4 = 5;
|
||||
; Monitoring, Emacs (Journal)
|
||||
icon-5 = 6;
|
||||
icon-default =
|
||||
|
||||
; Available tags:
|
||||
; <label-monitor>
|
||||
; <label-state> - gets replaced with <label-(active|urgent|occupied|empty)>
|
||||
; Default: <label-state>
|
||||
format = <label-state>
|
||||
format-padding = 0
|
||||
|
||||
; Available tokens:
|
||||
; %name%
|
||||
; Default: %name%
|
||||
label-monitor = %name%
|
||||
|
||||
; Available tokens:
|
||||
; %name%
|
||||
; %icon%
|
||||
; %index%
|
||||
; Default: %icon% %name%
|
||||
label-active = %icon%
|
||||
label-active-foreground = ${color.primary}
|
||||
label-active-overline = ${color.primary}
|
||||
|
||||
; Available tokens:
|
||||
; %name%
|
||||
; %icon%
|
||||
; %index%
|
||||
; Default: %icon% %name%
|
||||
label-occupied = %icon%
|
||||
label-occupied-foreground = ${color.alternate}
|
||||
|
||||
; Available tokens:
|
||||
; %name%
|
||||
; %icon%
|
||||
; %index%
|
||||
; Default: %icon% %name%
|
||||
label-urgent = %icon%
|
||||
label-urgent-foreground = ${color.secondary}
|
||||
|
||||
; Available tokens:
|
||||
; %name%
|
||||
; %icon%
|
||||
; %index%
|
||||
; Default: %icon% %name%
|
||||
label-empty = %icon%
|
||||
|
||||
label-active-padding = 2
|
||||
label-urgent-padding = 2
|
||||
label-occupied-padding = 2
|
||||
label-empty-padding = 2
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
@ -1,74 +0,0 @@
|
||||
;; ┌──────────────────────────────────────────────────────────────────────────────-----┐
|
||||
;; │░█▀█░█▀█░█░░░█░█░█▀▄░█▀█░█▀▄░░░░░░░░░█░█░█▀▀░█▀▀░█▀▄░░░█▄█░█▀█░█▀▄░█░█░█░░░█▀▀░█▀▀ │
|
||||
;; │░█▀▀░█░█░█░░░░█░░█▀▄░█▀█░█▀▄░░░░▀░░░░█░█░▀▀█░█▀▀░█▀▄░░░█░█░█░█░█░█░█░█░█░░░█▀▀░▀▀█ │
|
||||
;; │░▀░░░▀▀▀░▀▀▀░░▀░░▀▀░░▀░▀░▀░▀░░░░▀░░░░▀▀▀░▀▀▀░▀▀▀░▀░▀░░░▀░▀░▀▀▀░▀▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀ │
|
||||
;; │░Created░By░Aditya░Shakya░@adi1090x░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│
|
||||
;; └──────────────────────────────────────────────────────────────────────────────-----┘
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/updates]
|
||||
type = custom/script
|
||||
|
||||
; Available tokens:
|
||||
; %counter%
|
||||
; Command to be executed (using "/usr/bin/env sh -c [command]")
|
||||
exec = @packages@
|
||||
|
||||
; Conditional command that, if defined, needs to exit successfully
|
||||
; before the main exec command is invoked.
|
||||
; Default: ""
|
||||
;;exec-if = ""
|
||||
|
||||
; Will the script output continous content?
|
||||
; Default: false
|
||||
tail = true
|
||||
|
||||
; Seconds to sleep between updates
|
||||
; Default: 2 (0 if `tail = true`)
|
||||
interval = 0
|
||||
|
||||
; Available tags:
|
||||
; <output> - deprecated
|
||||
; <label> (default)
|
||||
format = <label>
|
||||
format-prefix =
|
||||
|
||||
; Available tokens:
|
||||
; %output%
|
||||
; Default: %output%
|
||||
label = %output%
|
||||
|
||||
; Available tokens:
|
||||
; %counter%
|
||||
; %pid%
|
||||
;
|
||||
click-left = @searchpkgs@
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/launcher]
|
||||
type = custom/text
|
||||
content =
|
||||
content-background = ${color.primary}
|
||||
content-foreground = ${color.module-fg}
|
||||
content-padding = 2
|
||||
click-left = @launcher@
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
|
||||
[module/popup-calendar]
|
||||
type = custom/script
|
||||
exec = @calendar@
|
||||
interval = 5
|
||||
click-left = @calendar@ --popup &
|
||||
|
||||
[module/sysmenu]
|
||||
type = custom/text
|
||||
content =
|
||||
content-background = ${color.primary}
|
||||
content-foreground = ${color.module-fg}
|
||||
content-padding = 2
|
||||
click-left = @powermenu@ &
|
||||
|
||||
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
@ -1,10 +0,0 @@
|
||||
/* colors */
|
||||
|
||||
* {
|
||||
al: #00000000;
|
||||
bg: #1F1F1FFF;
|
||||
bga: #546e7a33;
|
||||
bar: #FFFFFFFF;
|
||||
fg: #FFFFFFFF;
|
||||
ac: #546e7aFF;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
/* Confirm Dialog */
|
||||
|
||||
@import "colors.rasi"
|
||||
|
||||
* {
|
||||
background-color: @bg;
|
||||
text-color: @fg;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
window {
|
||||
width: 225px;
|
||||
padding: 25px;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
location: center;
|
||||
y-offset: -2em;
|
||||
}
|
||||
|
||||
entry {
|
||||
expand: true;
|
||||
text-color: @ac;
|
||||
}
|
@ -1,119 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* Author : Aditya Shakya
|
||||
* Mail : adi1090x@gmail.com
|
||||
* Github : @adi1090x
|
||||
* Twitter : @adi1090x
|
||||
*
|
||||
*/
|
||||
|
||||
configuration {
|
||||
font: "Iosevka Nerd Font 10";
|
||||
show-icons: true;
|
||||
icon-theme: "Papirus";
|
||||
display-drun: "";
|
||||
drun-display-format: "{name}";
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "colors.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @bg;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @ac;
|
||||
border-radius: 0px;
|
||||
width: 350px;
|
||||
location: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 0px;
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
font: "feather 12";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
placeholder-color: @bar;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
padding: 0px 0px 0px 10px;
|
||||
blink: true;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ prompt, entry ];
|
||||
background-color: @ac;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
margin: 0px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
listview {
|
||||
background-color: @al;
|
||||
padding: 0px;
|
||||
columns: 1;
|
||||
lines: 5;
|
||||
spacing: 5px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @al;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @al;
|
||||
text-color: @fg;
|
||||
orientation: horizontal;
|
||||
border-radius: 0px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 24px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 0px 2.5px 0px 2.5px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @bga;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
/* Confirm Dialog */
|
||||
|
||||
@import "colors.rasi"
|
||||
|
||||
* {
|
||||
background-color: @bg;
|
||||
text-color: @fg;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
window {
|
||||
width: 320px;
|
||||
padding: 25px;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
location: center;
|
||||
y-offset: -2em;
|
||||
}
|
||||
|
||||
entry {
|
||||
expand: true;
|
||||
text-color: @ac;
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* Author : Aditya Shakya
|
||||
* Mail : adi1090x@gmail.com
|
||||
* Github : @adi1090x
|
||||
* Twitter : @adi1090x
|
||||
*
|
||||
*/
|
||||
|
||||
configuration {
|
||||
font: "Iosevka Nerd Font 10";
|
||||
show-icons: true;
|
||||
icon-theme: "Papirus";
|
||||
display-drun: "";
|
||||
drun-display-format: "{name}";
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "colors.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @bg;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @ac;
|
||||
border-radius: 0px;
|
||||
width: 400px;
|
||||
location: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 0px 0px 0px 5px;
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
str: "";
|
||||
font: "feather 12";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
placeholder-color: @bar;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
padding: 0px 0px 0px 10px;
|
||||
blink: true;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt ];
|
||||
background-color: @ac;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
margin: 0px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
listview {
|
||||
background-color: @al;
|
||||
padding: 0px;
|
||||
columns: 1;
|
||||
lines: 8;
|
||||
spacing: 5px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @al;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @al;
|
||||
text-color: @fg;
|
||||
orientation: horizontal;
|
||||
border-radius: 0px;
|
||||
padding: 10px 10px 10px -17px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 24px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 0px 2.5px 0px 2.5px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @bga;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* Author : Aditya Shakya
|
||||
* Mail : adi1090x@gmail.com
|
||||
* Github : @adi1090x
|
||||
* Twitter : @adi1090x
|
||||
*
|
||||
*/
|
||||
|
||||
configuration {
|
||||
font: "Iosevka Nerd Font 10";
|
||||
show-icons: true;
|
||||
icon-theme: "Papirus";
|
||||
display-drun: "";
|
||||
drun-display-format: "{name}";
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "colors.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @bg;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @ac;
|
||||
border-radius: 0px;
|
||||
width: 350px;
|
||||
location: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 0px 0px 0px 5px;
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
str: "";
|
||||
font: "feather 12";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
placeholder-color: @bar;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
padding: 0px 0px 0px 10px;
|
||||
blink: true;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt ];
|
||||
background-color: @ac;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
margin: 0px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
listview {
|
||||
background-color: @al;
|
||||
padding: 0px;
|
||||
columns: 1;
|
||||
lines: 5;
|
||||
spacing: 5px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @al;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @al;
|
||||
text-color: @fg;
|
||||
orientation: horizontal;
|
||||
border-radius: 0px;
|
||||
padding: 10px 10px 10px -17px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 24px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 0px 2.5px 0px 2.5px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @bga;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* Author : Aditya Shakya
|
||||
* Mail : adi1090x@gmail.com
|
||||
* Github : @adi1090x
|
||||
* Twitter : @adi1090x
|
||||
*
|
||||
*/
|
||||
|
||||
configuration {
|
||||
font: "Iosevka Nerd Font 10";
|
||||
show-icons: true;
|
||||
icon-theme: "Papirus";
|
||||
display-drun: "";
|
||||
drun-display-format: "{name}";
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "colors.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @bg;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @ac;
|
||||
border-radius: 0px;
|
||||
width: 350px;
|
||||
location: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 0px 0px 0px 5px;
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
str: "";
|
||||
font: "feather 12";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @al;
|
||||
text-color: @bar;
|
||||
placeholder-color: @bar;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
padding: 0px 0px 0px 5px;
|
||||
blink: true;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, entry ];
|
||||
background-color: @ac;
|
||||
text-color: @bar;
|
||||
expand: false;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
margin: 0px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
listview {
|
||||
background-color: @al;
|
||||
padding: 0px;
|
||||
columns: 1;
|
||||
lines: 5;
|
||||
spacing: 5px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @al;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @al;
|
||||
text-color: @fg;
|
||||
orientation: horizontal;
|
||||
border-radius: 0px;
|
||||
padding: 10px 10px 10px -17px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
size: 24px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 0px 2.5px 0px 2.5px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @bga;
|
||||
text-color: @fg;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @ac;
|
||||
}
|
@ -1,234 +1,24 @@
|
||||
{ config, inputs, pkgs, ... }:
|
||||
|
||||
let user = "dekker1";
|
||||
keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOk8iAnIaa1deoc7jw8YACPNVka1ZFJxhnU4G74TmS+p" ]; in
|
||||
keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICwXNVel0w1f4nbmu2iJsqCoeiUsENzTLyhCZjSL+jT+" ]; in
|
||||
{
|
||||
imports = [
|
||||
./disk-config.nix
|
||||
../shared
|
||||
../shared/cachix
|
||||
];
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.systemd-boot.configurationLimit = 42;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "America/New_York";
|
||||
|
||||
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
|
||||
# Per-interface useDHCP will be mandatory in the future, so this generated config
|
||||
# replicates the default behaviour.
|
||||
networking.hostName = "%HOST%"; # Define your hostname.
|
||||
networking.useDHCP = false;
|
||||
networking.interfaces.%INTERFACE%.useDHCP = true;
|
||||
time.timeZone = "Australia/Melbourne";
|
||||
|
||||
# Turn on flag for proprietary software
|
||||
nix = {
|
||||
nixPath = [ "nixos-config=/home/${user}/.local/share/src/nixos-config:/etc/nixos" ];
|
||||
nixPath = [ "nixos-config=/home/${user}/.local/share/nixos-config:/etc/nixos" ];
|
||||
settings.allowed-users = [ "${user}" ];
|
||||
package = pkgs.nixUnstable;
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
};
|
||||
|
||||
# Manages keys and such
|
||||
programs.gnupg.agent.enable = true;
|
||||
|
||||
# Needed for anything GTK related
|
||||
programs.dconf.enable = true;
|
||||
|
||||
services.xserver.enable = true;
|
||||
|
||||
# Uncomment these for AMD or Nvidia GPU
|
||||
# boot.initrd.kernelModules = [ "amdgpu" ];
|
||||
# services.xserver.videoDrivers = [ "amdgpu" ];
|
||||
# services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
# Comment this for AMD GPU
|
||||
# This helps fix tearing of windows for Nvidia cards
|
||||
# services.xserver.screenSection = ''
|
||||
# Option "metamodes" "nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}"
|
||||
# Option "AllowIndirectGLXProtocol" "off"
|
||||
# Option "TripleBuffer" "on"
|
||||
# '';
|
||||
|
||||
# LightDM Display Manager
|
||||
services.xserver.displayManager.defaultSession = "none+bspwm";
|
||||
services.xserver.displayManager.lightdm = {
|
||||
enable = true;
|
||||
greeters.slick.enable = true;
|
||||
background = ./config/login-wallpaper.png;
|
||||
};
|
||||
|
||||
# Tiling window manager
|
||||
services.xserver.windowManager.bspwm = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# Turn Caps Lock into Ctrl
|
||||
services.xserver.layout = "us";
|
||||
services.xserver.xkbOptions = "ctrl:nocaps";
|
||||
|
||||
# Enable CUPS to print documents
|
||||
# services.printing.enable = true;
|
||||
# services.printing.drivers = [ pkgs.brlaser ]; # Brother printer driver
|
||||
|
||||
# Enable sound
|
||||
# sound.enable = true;
|
||||
# hardware.pulseaudio.enable = true;
|
||||
|
||||
# Video support
|
||||
hardware.opengl.enable = true;
|
||||
# hardware.nvidia.modesetting.enable = true;
|
||||
|
||||
# Enable Xbox support
|
||||
# hardware.xone.enable = true;
|
||||
|
||||
# Crypto wallet support
|
||||
hardware.ledger.enable = true;
|
||||
|
||||
# Better support for general peripherals
|
||||
services.xserver.libinput.enable = true;
|
||||
boot.kernelModules = [ "uinput" ];
|
||||
|
||||
# Sync state between machines
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
openDefaultPorts = true;
|
||||
dataDir = "/home/${user}/.local/share/syncthing";
|
||||
configDir = "/home/${user}/.config/syncthing";
|
||||
user = "${user}";
|
||||
group = "users";
|
||||
guiAddress = "127.0.0.1:8384";
|
||||
overrideFolders = true;
|
||||
overrideDevices = true;
|
||||
|
||||
settings.devices = {
|
||||
"Macbook Pro" = {
|
||||
id = "P2FYLQW-PKDFJGZ-EUGI2T7-OW4AH4I-KI462HD-U2VL3X3-GN55PP2-VNRE5AH";
|
||||
autoAcceptFolders = true;
|
||||
allowedNetwork = "192.168.0.0/16";
|
||||
addresses = [ "tcp://192.168.0.99:51820" ];
|
||||
};
|
||||
"Home Lab" = {
|
||||
id = "WW5O366-THBBBA3-HKQAYCP-EWADS4I-4KDDC5Z-3JCO42M-RLBZ3DY-NM7PEQA";
|
||||
allowedNetwork = "192.168.0.0/16";
|
||||
autoAcceptFolders = true;
|
||||
addresses = [ "tcp://192.168.0.103:51820" ];
|
||||
};
|
||||
};
|
||||
|
||||
settings.folders = {
|
||||
"XDG Share" = {
|
||||
id = "ukrub-quh7k";
|
||||
path = "/home/${user}/.local/share";
|
||||
devices = [ "Macbook Pro" "Home Lab" ];
|
||||
};
|
||||
};
|
||||
|
||||
settings.options.globalAnnounceEnabled = false; # Only sync on LAN
|
||||
settings.gui.insecureSkipHostcheck = true;
|
||||
settings.gui.insecureAdminAccess = true;
|
||||
};
|
||||
|
||||
# Add docker daemon
|
||||
virtualisation.docker.enable = true;
|
||||
virtualisation.docker.logDriver = "json-file";
|
||||
|
||||
# Picom, my window compositor with fancy effects
|
||||
#
|
||||
# Notes on writing exclude rules:
|
||||
#
|
||||
# class_g looks up index 1 in WM_CLASS value for an application
|
||||
# class_i looks up index 0
|
||||
#
|
||||
# To find the value for a specific application, use `xprop` at the
|
||||
# terminal and then click on a window of the application in question
|
||||
#
|
||||
services.picom = {
|
||||
enable = true;
|
||||
settings = {
|
||||
animations = true;
|
||||
animation-stiffness = 300.0;
|
||||
animation-dampening = 35.0;
|
||||
animation-clamping = false;
|
||||
animation-mass = 1;
|
||||
animation-for-workspace-switch-in = "auto";
|
||||
animation-for-workspace-switch-out = "auto";
|
||||
animation-for-open-window = "slide-down";
|
||||
animation-for-menu-window = "none";
|
||||
animation-for-transient-window = "slide-down";
|
||||
corner-radius = 12;
|
||||
rounded-corners-exclude = [
|
||||
"class_i = 'polybar'"
|
||||
"class_g = 'i3lock'"
|
||||
];
|
||||
round-borders = 3;
|
||||
round-borders-exclude = [];
|
||||
round-borders-rule = [];
|
||||
shadow = true;
|
||||
shadow-radius = 8;
|
||||
shadow-opacity = 0.4;
|
||||
shadow-offset-x = -8;
|
||||
shadow-offset-y = -8;
|
||||
fading = false;
|
||||
inactive-opacity = 0.8;
|
||||
frame-opacity = 0.7;
|
||||
inactive-opacity-override = false;
|
||||
active-opacity = 1.0;
|
||||
focus-exclude = [
|
||||
];
|
||||
|
||||
opacity-rule = [
|
||||
"100:class_g = 'i3lock'"
|
||||
"60:class_g = 'Dunst'"
|
||||
"100:class_g = 'Alacritty' && focused"
|
||||
"90:class_g = 'Alacritty' && !focused"
|
||||
];
|
||||
|
||||
blur-kern = "3x3box";
|
||||
blur = {
|
||||
method = "kernel";
|
||||
strength = 8;
|
||||
background = false;
|
||||
background-frame = false;
|
||||
background-fixed = false;
|
||||
kern = "3x3box";
|
||||
};
|
||||
|
||||
shadow-exclude = [
|
||||
"class_g = 'Dunst'"
|
||||
];
|
||||
|
||||
blur-background-exclude = [
|
||||
"class_g = 'Dunst'"
|
||||
];
|
||||
|
||||
backend = "glx";
|
||||
vsync = false;
|
||||
mark-wmwin-focused = true;
|
||||
mark-ovredir-focused = true;
|
||||
detect-rounded-corners = true;
|
||||
detect-client-opacity = false;
|
||||
detect-transient = true;
|
||||
detect-client-leader = true;
|
||||
use-damage = true;
|
||||
log-level = "info";
|
||||
|
||||
wintypes = {
|
||||
normal = { fade = true; shadow = false; };
|
||||
tooltip = { fade = true; shadow = false; opacity = 0.75; focus = true; full-shadow = false; };
|
||||
dock = { shadow = false; };
|
||||
dnd = { shadow = false; };
|
||||
popup_menu = { opacity = 1.0; };
|
||||
dropdown_menu = { opacity = 1.0; };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# It's me, it's you, it's everyone
|
||||
@ -236,64 +26,21 @@ let user = "dekker1";
|
||||
isNormalUser = true;
|
||||
extraGroups = [
|
||||
"wheel" # Enable ‘sudo’ for the user.
|
||||
"docker"
|
||||
];
|
||||
shell = pkgs.zsh;
|
||||
openssh.authorizedKeys.keys = keys;
|
||||
};
|
||||
|
||||
# Root user
|
||||
users.users.root = {
|
||||
openssh.authorizedKeys.keys = keys;
|
||||
};
|
||||
|
||||
# Don't require password for users in `wheel` group for these commands
|
||||
security.sudo = {
|
||||
enable = true;
|
||||
extraRules = [{
|
||||
commands = [
|
||||
{
|
||||
command = "${pkgs.systemd}/bin/reboot";
|
||||
options = [ "NOPASSWD" ];
|
||||
}
|
||||
];
|
||||
groups = [ "wheel" ];
|
||||
}];
|
||||
};
|
||||
|
||||
# Let's be able to SSH into this machine
|
||||
services.openssh.enable = true;
|
||||
|
||||
# My shell
|
||||
programs.zsh.enable = true;
|
||||
|
||||
# My editor runs as a daemon
|
||||
# @todo: submit startupTimeout option PR to nixpkgs
|
||||
services.emacs = {
|
||||
enable = true;
|
||||
package = pkgs.emacs-unstable;
|
||||
startupTimeout = "7min"; # option comes from dustinlyons/nixpkgs
|
||||
};
|
||||
|
||||
# @todo: submit feather-font PR to nixpkgs
|
||||
fonts.packages = with pkgs; [
|
||||
dejavu_fonts
|
||||
emacs-all-the-icons-fonts
|
||||
feather-font # package comes from dustinlyons/nixpkgs
|
||||
jetbrains-mono
|
||||
font-awesome
|
||||
noto-fonts
|
||||
noto-fonts-emoji
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
gitAndTools.gitFull
|
||||
inetutils
|
||||
];
|
||||
|
||||
services.gvfs.enable = true; # Mount, trash, and other functionalities
|
||||
services.tumbler.enable = true; # Thumbnail support for images
|
||||
|
||||
system.stateVersion = "21.05"; # Don't change this
|
||||
|
||||
}
|
||||
|
@ -1,34 +0,0 @@
|
||||
{ ... }: {
|
||||
# This formats the disk with the ext4 filesystem
|
||||
# Other examples found here: https://github.com/nix-community/disko/tree/master/example
|
||||
disko.devices = {
|
||||
disk = {
|
||||
vdb = {
|
||||
device = "/dev/%DISK%";
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
type = "EF00";
|
||||
size = "100M";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "ext4";
|
||||
mountpoint = "/";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
359
nixos/files.nix
359
nixos/files.nix
@ -6,363 +6,4 @@ let
|
||||
xdg_dataHome = "${home}/.local/share";
|
||||
xdg_stateHome = "${home}/.local/state"; in
|
||||
{
|
||||
|
||||
"${xdg_configHome}/bspwm/bspwmrc" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#! /bin/sh
|
||||
#
|
||||
# Set the number of workspaces
|
||||
bspc monitor -d 1 2 3 4 5 6
|
||||
|
||||
# Launch keybindings daemon
|
||||
pgrep -x sxhkd > /dev/null || sxhkd &
|
||||
|
||||
# Window configurations
|
||||
bspc config border_width 0
|
||||
bspc config window_gap 16
|
||||
bspc config split_ratio 0.52
|
||||
bspc config borderless_monocle true
|
||||
bspc config gapless_monocle true
|
||||
|
||||
# Padding outside of the window
|
||||
bspc config top_padding 60
|
||||
bspc config bottom_padding 60
|
||||
bspc config left_padding 60
|
||||
bspc config right_padding 60
|
||||
|
||||
# Move floating windows
|
||||
bspc config pointer_action1 move
|
||||
|
||||
# Resize floating windows
|
||||
bspc config pointer_action2 resize_side
|
||||
bspc config pointer_action2 resize_corner
|
||||
|
||||
# Set background and top bar
|
||||
systemctl --user start polybar
|
||||
|
||||
sleep .25
|
||||
|
||||
# Wait for the network to be up
|
||||
notify-send 'Waiting for network...'
|
||||
while ! systemctl is-active --quiet network-online.target; do sleep 1; done
|
||||
notify-send 'Network found.'
|
||||
|
||||
# Wait for the Emacs daemon
|
||||
notify-send 'Starting Emacs...'
|
||||
/run/current-system/sw/bin/emacsclient -a "" -e '(progn)' &
|
||||
|
||||
# Wait for Emacs daemon to be ready
|
||||
while ! /run/current-system/sw/bin/emacsclient -e '(progn)' &>/dev/null; do
|
||||
sleep 1
|
||||
done
|
||||
notify-send 'Emacs daemon started.'
|
||||
'';
|
||||
};
|
||||
|
||||
"${xdg_configHome}/sxhkd/sxhkdrc" = {
|
||||
text = ''
|
||||
# Close window
|
||||
alt + F4
|
||||
bspc node --close
|
||||
|
||||
# Make split ratios equal
|
||||
super + equal
|
||||
bspc node @/ --equalize
|
||||
|
||||
# Make split ratios balanced
|
||||
super + minus
|
||||
bspc node @/ --balance
|
||||
|
||||
# Toogle tiling of window
|
||||
super + d
|
||||
bspc query --nodes -n focused.tiled && state=floating || state=tiled; \
|
||||
bspc node --state \~$state
|
||||
|
||||
# Toggle fullscreen of window
|
||||
super + f
|
||||
bspc node --state \~fullscreen
|
||||
|
||||
# Swap the current node and the biggest window
|
||||
super + g
|
||||
bspc node -s biggest.window
|
||||
|
||||
# Swap the current node and the smallest window
|
||||
super + shift + g
|
||||
bspc node -s biggest.window
|
||||
|
||||
# Alternate between the tiled and monocle layout
|
||||
super + m
|
||||
bspc desktop -l next
|
||||
|
||||
# Move between windows in monocle layout
|
||||
super + {_, alt + }m
|
||||
bspc node -f {next, prev}.local.!hidden.window
|
||||
|
||||
# Focus the node in the given direction
|
||||
super + {_,shift + }{h,j,k,l}
|
||||
bspc node -{f,s} {west,south,north,east}
|
||||
|
||||
# Focus left/right occupied desktop
|
||||
super + {Left,Right}
|
||||
bspc desktop --focus {prev,next}.occupied
|
||||
|
||||
# Focus left/right occupied desktop
|
||||
super + {Up,Down}
|
||||
bspc desktop --focus {prev,next}.occupied
|
||||
|
||||
# Focus left/right desktop
|
||||
ctrl + alt + {Left,Right}
|
||||
bspc desktop --focus {prev,next}
|
||||
|
||||
# Focus left/right desktop
|
||||
ctrl + alt + {Up, Down}
|
||||
bspc desktop --focus {prev,next}
|
||||
|
||||
# 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 the direction
|
||||
super + alt + {h,j,k,l}
|
||||
bspc node -p {west,south,north,east}
|
||||
|
||||
# Cancel the preselect
|
||||
# For context on syntax: https://github.com/baskerville/bspwm/issues/344
|
||||
super + alt + {_,shift + }Escape
|
||||
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
||||
|
||||
# Preselect the direction
|
||||
super + ctrl + {h,j,k,l}
|
||||
bspc node -p {west,south,north,east}
|
||||
|
||||
# Cancel the preselect
|
||||
# For context on syntax: https://github.com/baskerville/bspwm/issues/344
|
||||
super + ctrl + {_,shift + }Escape
|
||||
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
||||
|
||||
# Set the node flags
|
||||
super + ctrl + {m,x,s,p}
|
||||
bspc node -g {marked,locked,sticky,private}
|
||||
|
||||
# Send the newest marked node to the newest preselected node
|
||||
super + y
|
||||
bspc node newest.marked.local -n newest.!automatic.local
|
||||
|
||||
# Program launcher
|
||||
super + @space
|
||||
rofi -config -no-lazy-grab -show drun -modi drun -theme /home/${user}/.config/rofi/launcher.rasi
|
||||
|
||||
# Terminal emulator
|
||||
super + Return
|
||||
bspc rule -a Alacritty -o state=floating rectangle=1024x768x0x0 center=true && /etc/profiles/per-user/${user}/bin/alacritty
|
||||
|
||||
# Terminal emulator
|
||||
super + ctrl + Return
|
||||
/etc/profiles/per-user/${user}/bin/alacritty
|
||||
|
||||
# Jump to workspaces
|
||||
super + t
|
||||
bspc desktop --focus ^2
|
||||
super + b
|
||||
bspc desktop --focus ^1
|
||||
super + w
|
||||
bspc desktop --focus ^4
|
||||
super + Tab
|
||||
bspc {node,desktop} -f last
|
||||
|
||||
# Keepass XC
|
||||
super + shift + x
|
||||
/etc/profiles/per-user/${user}/bin/keepassxc
|
||||
|
||||
# Emacs
|
||||
# -c flag is --create-frame
|
||||
# -a flag is fallback to plain emacs if daemon fails
|
||||
super + alt + Return
|
||||
emacsclient -c -a emacs
|
||||
|
||||
super + alt + e
|
||||
systemctl --user restart emacs.service && \
|
||||
emacsclient -c -a emacs
|
||||
|
||||
# Web browser
|
||||
ctrl + alt + Return
|
||||
google-chrome-stable
|
||||
|
||||
# File browser at home dir
|
||||
super + shift + @space
|
||||
pcmanfm
|
||||
|
||||
# Take a screenshot with PrintSc
|
||||
Print
|
||||
flameshot gui -c -p $HOME/.local/share/img/screenshots
|
||||
|
||||
# Lock the screen
|
||||
ctrl + alt + BackSpace
|
||||
i3lock
|
||||
|
||||
# Audio controls for + volume
|
||||
XF86AudioRaiseVolume
|
||||
pactl set-sink-volume @DEFAULT_SINK@ +5%
|
||||
|
||||
# Audio controls for - volume
|
||||
XF86AudioLowerVolume
|
||||
pactl set-sink-volume @DEFAULT_SINK@ -5%
|
||||
|
||||
# Audio controls for mute
|
||||
XF86AudioMute
|
||||
pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
'';
|
||||
};
|
||||
|
||||
"${xdg_configHome}/polybar/bin/popup-calendar.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
|
||||
DATE="$(/run/current-system/sw/bin/date +"%B %d, %Y")"
|
||||
SCREEN_WIDTH=$(/run/current-system/sw/bin/xrandr | /run/current-system/sw/bin/grep '*' | /run/current-system/sw/bin/awk '{print $1}' | /run/current-system/sw/bin/cut -d 'x' -f1)
|
||||
POSX=$(( (SCREEN_WIDTH / 2) - ((SCREEN_WIDTH / 2 * 625) / 10000) ))
|
||||
|
||||
case "$1" in
|
||||
--popup)
|
||||
/etc/profiles/per-user/${user}/bin/yad --calendar --fixed \
|
||||
--posx=$POSX --posy=80 --no-buttons --borders=0 --title="yad-calendar" \
|
||||
--close-on-unfocus
|
||||
;;
|
||||
*)
|
||||
echo "$DATE"
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
};
|
||||
|
||||
"${xdg_configHome}/polybar/bin/check-nixos-updates.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
|
||||
/run/current-system/sw/bin/git -C ~/.local/share/src/nixpkgs fetch upstream master
|
||||
UPDATES=$(/run/current-system/sw/bin/git -C ~/.local/share/src/nixpkgs rev-list origin/master..upstream/master --count 2>/dev/null);
|
||||
/run/current-system/sw/bin/echo " $UPDATES"; # Extra space for presentation with icon
|
||||
/run/current-system/sw/bin/sleep 1800;
|
||||
'';
|
||||
};
|
||||
|
||||
"${xdg_configHome}/polybar/bin/search-nixos-updates.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
|
||||
/etc/profiles/per-user/${user}/bin/google-chrome-stable --new-window "https://search.nixos.org/packages?channel=23.05&from=0&size=50&sort=relevance&type=packages"
|
||||
'';
|
||||
};
|
||||
|
||||
"${xdg_configHome}/rofi/colors.rasi".text = builtins.readFile ./config/rofi/colors.rasi;
|
||||
"${xdg_configHome}/rofi/confirm.rasi".text = builtins.readFile ./config/rofi/confirm.rasi;
|
||||
"${xdg_configHome}/rofi/launcher.rasi".text = builtins.readFile ./config/rofi/launcher.rasi;
|
||||
"${xdg_configHome}/rofi/message.rasi".text = builtins.readFile ./config/rofi/message.rasi;
|
||||
"${xdg_configHome}/rofi/networkmenu.rasi".text = builtins.readFile ./config/rofi/networkmenu.rasi;
|
||||
"${xdg_configHome}/rofi/powermenu.rasi".text = builtins.readFile ./config/rofi/powermenu.rasi;
|
||||
"${xdg_configHome}/rofi/styles.rasi".text = builtins.readFile ./config/rofi/styles.rasi;
|
||||
|
||||
"${xdg_configHome}/rofi/bin/launcher.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
|
||||
rofi -no-config -no-lazy-grab -show drun -modi drun -theme ${xdg_configHome}/rofi/launcher.rasi
|
||||
'';
|
||||
};
|
||||
|
||||
# @todo: Don't use hardcoded src paths
|
||||
"${xdg_configHome}/rofi/bin/powermenu.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
|
||||
configDir="~/.local/share/src/nixos-config/nixos/config/rofi"
|
||||
uptime=$(uptime -p | sed -e 's/up //g')
|
||||
rofi_command="rofi -no-config -theme $configDir/powermenu.rasi"
|
||||
|
||||
# Options
|
||||
shutdown=" Shutdown"
|
||||
reboot=" Restart"
|
||||
lock=" Lock"
|
||||
suspend=" Sleep"
|
||||
logout=" Logout"
|
||||
|
||||
# Confirmation
|
||||
confirm_exit() {
|
||||
rofi -dmenu\
|
||||
-no-config\
|
||||
-i\
|
||||
-no-fixed-num-lines\
|
||||
-p "Are You Sure? : "\
|
||||
-theme $configDir/confirm.rasi
|
||||
}
|
||||
|
||||
# Message
|
||||
msg() {
|
||||
rofi -no-config -theme "$configDir/message.rasi" -e "Available Options - yes / y / no / n"
|
||||
}
|
||||
|
||||
# Variable passed to rofi
|
||||
options="$lock\n$suspend\n$logout\n$reboot\n$shutdown"
|
||||
chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 0)"
|
||||
case $chosen in
|
||||
$shutdown)
|
||||
ans=$(confirm_exit &)
|
||||
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
|
||||
systemctl poweroff
|
||||
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
|
||||
exit 0
|
||||
else
|
||||
msg
|
||||
fi
|
||||
;;
|
||||
$reboot)
|
||||
ans=$(confirm_exit &)
|
||||
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
|
||||
systemctl reboot
|
||||
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
|
||||
exit 0
|
||||
else
|
||||
msg
|
||||
fi
|
||||
;;
|
||||
$lock)
|
||||
betterlockscreen -l
|
||||
;;
|
||||
$suspend)
|
||||
ans=$(confirm_exit &)
|
||||
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
|
||||
mpc -q pause
|
||||
amixer set Master mute
|
||||
systemctl suspend
|
||||
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
|
||||
exit 0
|
||||
else
|
||||
msg
|
||||
fi
|
||||
;;
|
||||
$logout)
|
||||
ans=$(confirm_exit &)
|
||||
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
|
||||
bspc quit
|
||||
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
|
||||
exit 0
|
||||
else
|
||||
msg
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
@ -5,26 +5,6 @@ let
|
||||
xdg_configHome = "/home/${user}/.config";
|
||||
shared-programs = import ../shared/home-manager.nix { inherit config pkgs lib; };
|
||||
shared-files = import ../shared/files.nix { inherit config pkgs; };
|
||||
|
||||
polybar-user_modules = builtins.readFile (pkgs.substituteAll {
|
||||
src = ./config/polybar/user_modules.ini;
|
||||
packages = "${xdg_configHome}/polybar/bin/check-nixos-updates.sh";
|
||||
searchpkgs = "${xdg_configHome}/polybar/bin/search-nixos-updates.sh";
|
||||
launcher = "${xdg_configHome}/polybar/bin/launcher.sh";
|
||||
powermenu = "${xdg_configHome}/rofi/bin/powermenu.sh";
|
||||
calendar = "${xdg_configHome}/polybar/bin/popup-calendar.sh";
|
||||
});
|
||||
|
||||
polybar-config = pkgs.substituteAll {
|
||||
src = ./config/polybar/config.ini;
|
||||
font0 = "DejaVu Sans:size=12;3";
|
||||
font1 = "feather:size=12;3"; # dustinlyons/nixpkgs
|
||||
};
|
||||
|
||||
polybar-modules = builtins.readFile ./config/polybar/modules.ini;
|
||||
polybar-bars = builtins.readFile ./config/polybar/bars.ini;
|
||||
polybar-colors = builtins.readFile ./config/polybar/colors.ini;
|
||||
|
||||
in
|
||||
{
|
||||
home = {
|
||||
@ -36,82 +16,6 @@ in
|
||||
stateVersion = "21.05";
|
||||
};
|
||||
|
||||
# Use a dark theme
|
||||
gtk = {
|
||||
enable = true;
|
||||
iconTheme = {
|
||||
name = "Adwaita-dark";
|
||||
package = pkgs.gnome.adwaita-icon-theme;
|
||||
};
|
||||
theme = {
|
||||
name = "Adwaita-dark";
|
||||
package = pkgs.gnome.adwaita-icon-theme;
|
||||
};
|
||||
};
|
||||
|
||||
# Screen lock
|
||||
services.screen-locker = {
|
||||
enable = true;
|
||||
inactiveInterval = 10;
|
||||
lockCmd = "${pkgs.i3lock-fancy-rapid}/bin/i3lock-fancy-rapid 10 15";
|
||||
};
|
||||
|
||||
# Auto mount devices
|
||||
services.udiskie.enable = true;
|
||||
|
||||
services.polybar = {
|
||||
enable = true;
|
||||
config = polybar-config;
|
||||
extraConfig = polybar-bars + polybar-colors + polybar-modules + polybar-user_modules;
|
||||
package = pkgs.polybarFull;
|
||||
script = "polybar main &";
|
||||
};
|
||||
|
||||
services.dunst = {
|
||||
enable = true;
|
||||
package = pkgs.dunst;
|
||||
settings = {
|
||||
global = {
|
||||
monitor = 0;
|
||||
follow = "mouse";
|
||||
border = 0;
|
||||
height = 400;
|
||||
width = 320;
|
||||
offset = "33x65";
|
||||
indicate_hidden = "yes";
|
||||
shrink = "no";
|
||||
separator_height = 0;
|
||||
padding = 32;
|
||||
horizontal_padding = 32;
|
||||
frame_width = 0;
|
||||
sort = "no";
|
||||
idle_threshold = 120;
|
||||
font = "Noto Sans";
|
||||
line_height = 4;
|
||||
markup = "full";
|
||||
format = "<b>%s</b>\n%b";
|
||||
alignment = "left";
|
||||
transparency = 10;
|
||||
show_age_threshold = 60;
|
||||
word_wrap = "yes";
|
||||
ignore_newline = "no";
|
||||
stack_duplicates = false;
|
||||
hide_duplicate_count = "yes";
|
||||
show_indicators = "no";
|
||||
icon_position = "left";
|
||||
icon_theme = "Adwaita-dark";
|
||||
sticky_history = "yes";
|
||||
history_length = 20;
|
||||
history = "ctrl+grave";
|
||||
browser = "google-chrome-stable";
|
||||
always_run_script = true;
|
||||
title = "Dunst";
|
||||
class = "Dunst";
|
||||
max_icon_size = 64;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
programs = shared-programs // {};
|
||||
|
||||
}
|
||||
|
@ -3,75 +3,6 @@
|
||||
with pkgs;
|
||||
let shared-packages = import ../shared/packages.nix { inherit pkgs; }; in
|
||||
shared-packages ++ [
|
||||
|
||||
# Security and authentication
|
||||
yubikey-manager-qt
|
||||
yubikey-agent
|
||||
keepassxc
|
||||
|
||||
# App and package management
|
||||
appimage-run
|
||||
gnumake
|
||||
cmake
|
||||
home-manager
|
||||
|
||||
# Media and design tools
|
||||
vlc
|
||||
fontconfig
|
||||
font-manager
|
||||
|
||||
# Calculators
|
||||
bc # old school calculator
|
||||
galculator
|
||||
|
||||
# Audio tools
|
||||
cava # Terminal audio visualizer
|
||||
pavucontrol # Pulse audio controls
|
||||
|
||||
# Messaging and chat applications
|
||||
cider # Apple Music on Linux
|
||||
# tdesktop # telegram desktop
|
||||
|
||||
# Testing and development tools
|
||||
direnv
|
||||
rofi
|
||||
rofi-calc
|
||||
rnix-lsp # lsp-mode for nix
|
||||
postgresql
|
||||
libtool # for Emacs vterm
|
||||
|
||||
# Screenshot and recording tools
|
||||
flameshot
|
||||
simplescreenrecorder
|
||||
|
||||
# Text and terminal utilities
|
||||
feh # Manage wallpapers
|
||||
screenkey
|
||||
tree
|
||||
unixtools.ifconfig
|
||||
unixtools.netstat
|
||||
xclip # For the org-download package in Emacs
|
||||
xorg.xwininfo # Provides a cursor to click and learn about windows
|
||||
xorg.xrandr
|
||||
|
||||
# File and system utilities
|
||||
inotify-tools # inotifywait, inotifywatch - For file system events
|
||||
i3lock-fancy-rapid
|
||||
libnotify
|
||||
playerctl # Control media players from command line
|
||||
pinentry-curses
|
||||
pcmanfm # Our file browser
|
||||
sqlite
|
||||
xdg-utils
|
||||
|
||||
# Other utilities
|
||||
yad # I use yad-calendar with polybar
|
||||
xdotool
|
||||
google-chrome
|
||||
|
||||
# PDF viewer
|
||||
zathura
|
||||
|
||||
# Music and entertainment
|
||||
spotify
|
||||
# Encryption and security tools
|
||||
pinentry
|
||||
]
|
||||
|
1
shared/config/emacs/.gitignore
vendored
1
shared/config/emacs/.gitignore
vendored
@ -1 +0,0 @@
|
||||
config.el
|
File diff suppressed because it is too large
Load Diff
@ -1,117 +0,0 @@
|
||||
;; -------------------------
|
||||
;; Variable Declarations
|
||||
;; -------------------------
|
||||
(defvar org-config-file "~/.local/share/src/nixos-config/shared/config/emacs/config.org")
|
||||
(defvar default-config-file "~/.emacs.d/default-config.org")
|
||||
(defvar default-config-url "https://raw.githubusercontent.com/dustinlyons/nixos-config/9ad810c818b895c1f67f4daf21bbef31d8b5e8cd/shared/config/emacs/config.org")
|
||||
|
||||
;; -------------------------
|
||||
;; Package Manager Setup
|
||||
;; -------------------------
|
||||
(require 'package)
|
||||
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||
("gnu" . "http://elpa.gnu.org/packages/")))
|
||||
|
||||
(unless (assoc-default "melpa" package-archives)
|
||||
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t))
|
||||
(unless (assoc-default "org" package-archives)
|
||||
(add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t))
|
||||
|
||||
(setq package-enable-at-startup nil)
|
||||
|
||||
;; -------------------------
|
||||
;; Use-Package Setup
|
||||
;; -------------------------
|
||||
(unless (package-installed-p 'use-package)
|
||||
(package-initialize)
|
||||
(package-install 'use-package))
|
||||
(setq use-package-verbose t)
|
||||
(setq use-package-always-ensure t)
|
||||
(require 'use-package)
|
||||
|
||||
;; -------------------------
|
||||
;; Environment Variables Setup
|
||||
;; -------------------------
|
||||
(use-package exec-path-from-shell
|
||||
:if (memq window-system '(mac ns x))
|
||||
:config
|
||||
(setq exec-path-from-shell-variables '("PATH" "GOPATH" "PNPM_HOME"))
|
||||
(exec-path-from-shell-initialize))
|
||||
|
||||
(when (daemonp)
|
||||
(exec-path-from-shell-initialize))
|
||||
|
||||
;; -------------------------
|
||||
;; Straight.el Setup
|
||||
;; -------------------------
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
|
||||
(bootstrap-version 6))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously
|
||||
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
|
||||
'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
(setq straight-use-package-by-default t)
|
||||
(package-initialize)
|
||||
|
||||
;; -------------------------
|
||||
;; Window and UI Setup
|
||||
;; -------------------------
|
||||
(defun dl/window-setup ()
|
||||
(column-number-mode)
|
||||
(scroll-bar-mode 0)
|
||||
(menu-bar-mode -1)
|
||||
(tool-bar-mode 0)
|
||||
(winner-mode 1)
|
||||
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
|
||||
(add-to-list 'default-frame-alist '(ns-appearance . dark))
|
||||
(setq ns-use-proxy-icon nil)
|
||||
(setq frame-title-format nil))
|
||||
(dl/window-setup)
|
||||
|
||||
;; -------------------------
|
||||
;; Org Mode Setup
|
||||
;; -------------------------
|
||||
(defun dl/org-mode-setup ()
|
||||
(org-indent-mode)
|
||||
(variable-pitch-mode 1)
|
||||
(auto-fill-mode 0)
|
||||
(visual-line-mode 1)
|
||||
(setq evil-auto-indent nil))
|
||||
|
||||
(use-package org
|
||||
:defer t
|
||||
:hook (org-mode . dl/org-mode-setup)
|
||||
:config
|
||||
(setq org-edit-src-content-indentation 2
|
||||
org-ellipsis " ▾"
|
||||
org-hide-emphasis-markers t
|
||||
org-hide-block-startup nil)
|
||||
:bind
|
||||
(("C-c a" . org-agenda)))
|
||||
|
||||
;; -------------------------
|
||||
;; Default Config Download
|
||||
;; -------------------------
|
||||
(defun dl/download-default-config ()
|
||||
(unless (file-exists-p default-config-file)
|
||||
(url-retrieve default-config-url
|
||||
(lambda (_status)
|
||||
;; delete-region removes the HTTP headers from the downloaded content.
|
||||
(delete-region (point-min) (1+ url-http-end-of-headers))
|
||||
(write-file default-config-file)))))
|
||||
|
||||
;; -------------------------
|
||||
;; Load Org Config or Default
|
||||
;; -------------------------
|
||||
(unless (file-exists-p org-config-file)
|
||||
(dl/download-default-config))
|
||||
(if (file-exists-p org-config-file)
|
||||
(org-babel-load-file org-config-file)
|
||||
(org-babel-load-file default-config-file))
|
@ -1,288 +0,0 @@
|
||||
# Temporarily change options.
|
||||
'builtin' 'local' '-a' 'p10k_config_opts'
|
||||
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
|
||||
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
|
||||
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
|
||||
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
|
||||
|
||||
() {
|
||||
emulate -L zsh
|
||||
setopt no_unset
|
||||
|
||||
autoload -Uz is-at-least && is-at-least 5.1 || return
|
||||
|
||||
# Unset all configuration options.
|
||||
unset -m 'POWERLEVEL9K_*'
|
||||
|
||||
# Left prompt segments.
|
||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||
dir # current directory
|
||||
vcs # git status
|
||||
context # user@host
|
||||
command_execution_time # previous command duration
|
||||
virtualenv # python virtual environment
|
||||
prompt_char # prompt symbol
|
||||
)
|
||||
|
||||
# Right prompt segments.
|
||||
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
||||
nix_shell_with_name
|
||||
)
|
||||
|
||||
# Defines character set used by powerlevel10k.
|
||||
typeset -g POWERLEVEL9K_MODE=nerdfont-complete
|
||||
|
||||
# When set to `moderate`, some icons will have an extra space after them. This is meant to avoid
|
||||
# icon overlap when using non-monospace fonts. When set to `none`, spaces are not added.
|
||||
typeset -g POWERLEVEL9K_ICON_PADDING=none
|
||||
|
||||
# Basic style options that define the overall prompt look.
|
||||
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
|
||||
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons
|
||||
|
||||
# Add an empty line before each prompt except the first. This doesn't emulate the bug
|
||||
# in Pure that makes prompt drift down whenever you use the ALT-C binding from fzf or similar.
|
||||
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
||||
|
||||
# Green prompt symbol if the last command succeeded.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=002
|
||||
# Red prompt symbol if the last command failed.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=001
|
||||
# Default prompt symbol.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯'
|
||||
# Prompt symbol in command vi mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮'
|
||||
# Prompt symbol in visual vi mode is the same as in command mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮'
|
||||
# Prompt symbol in overwrite vi mode is the same as in command mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
|
||||
|
||||
# Grey Python Virtual Environment.
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=007
|
||||
# Don't show Python version.
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
||||
|
||||
# Blue current directory.
|
||||
typeset -g POWERLEVEL9K_DIR_FOREGROUND=blue
|
||||
|
||||
# Context format when root: user@host. The first part white, the rest grey.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%7F%n%f%007F@%m%f'
|
||||
# Context format when not root: user@host. The whole thing grey.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%007F%n@%m%f'
|
||||
# Don't show context unless root or in SSH.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=
|
||||
|
||||
# Show previous command duration only if it's >= 5s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5
|
||||
# Don't show fractional seconds. Thus, 7s rather than 7.3s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
|
||||
# Duration format: 1d 2h 3m 4s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
|
||||
# Yellow previous command duration.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=007
|
||||
|
||||
# Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
|
||||
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
|
||||
|
||||
# Untracked files icon. It's really a question mark, your font isn't broken.
|
||||
# Change the value of this parameter to show a different icon.
|
||||
typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
|
||||
|
||||
# Version control system colors.
|
||||
typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=2
|
||||
typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=3
|
||||
typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=2
|
||||
typeset -g POWERLEVEL9K_VCS_CONFLICTED_FOREGROUND=3
|
||||
typeset -g POWERLEVEL9K_VCS_LOADING_FOREGROUND=8
|
||||
|
||||
# Nix shell color.
|
||||
typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0
|
||||
typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4
|
||||
|
||||
# Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line.
|
||||
typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION=
|
||||
|
||||
function prompt_nix_shell_with_name() {
|
||||
if [[ -n "${IN_NIX_SHELL-}" ]]; then
|
||||
if [[ "${name-nix-shell}" != nix-shell ]] && [ "${name-shell}" != shell ]; then
|
||||
p10k segment -b 4 -f 15 -r -i NIX_SHELL_ICON -t "$name"
|
||||
else
|
||||
p10k segment -b 4 -f 15 -r -i NIX_SHELL_ICON
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
|
||||
# https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
|
||||
function my_git_formatter() {
|
||||
emulate -L zsh
|
||||
|
||||
if [[ -n $P9K_CONTENT ]]; then
|
||||
# If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
|
||||
# gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
|
||||
typeset -g my_git_format=$P9K_CONTENT
|
||||
return
|
||||
fi
|
||||
|
||||
if (( $1 )); then
|
||||
# Styling for up-to-date Git status.
|
||||
local meta='%f' # default foreground
|
||||
local clean='%002F' # green foreground
|
||||
local modified='%003F' # yellow foreground
|
||||
local untracked='%004F' # blue foreground
|
||||
local conflicted='%001F' # red foreground
|
||||
else
|
||||
# Styling for incomplete and stale Git status.
|
||||
local meta='%244F' # grey foreground
|
||||
local clean='%244F' # grey foreground
|
||||
local modified='%244F' # grey foreground
|
||||
local untracked='%244F' # grey foreground
|
||||
local conflicted='%244F' # grey foreground
|
||||
fi
|
||||
|
||||
local res
|
||||
|
||||
if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
|
||||
local branch=${(V)VCS_STATUS_LOCAL_BRANCH}
|
||||
|
||||
# If local branch name is at most 32 characters long, show it in full.
|
||||
# Otherwise show the first 12 … the last 12.
|
||||
(( $#branch > 32 )) && branch[13,-13]="…" # <-- this line
|
||||
|
||||
if (( VCS_STATUS_HAS_CONFLICTED)); then
|
||||
res+="${conflicted}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
|
||||
else
|
||||
if (( VCS_STATUS_HAS_STAGED || VCS_STATUS_HAS_UNSTAGED )); then
|
||||
res+="${modified}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
|
||||
else
|
||||
if (( VCS_STATUS_HAS_UNTRACKED )); then
|
||||
res+="${untracked}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
|
||||
else
|
||||
res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n $VCS_STATUS_TAG
|
||||
# Show tag only if not on a branch.
|
||||
&& -z $VCS_STATUS_LOCAL_BRANCH # <-- this line
|
||||
]]; then
|
||||
local tag=${(V)VCS_STATUS_TAG}
|
||||
# If tag name is at most 32 characters long, show it in full.
|
||||
# Otherwise show the first 12 … the last 12.
|
||||
(( $#tag > 32 )) && tag[13,-13]="…" # <-- this line
|
||||
res+="${meta}#${clean}${tag//\%/%%}"
|
||||
fi
|
||||
|
||||
# Display the current Git commit if there is no branch and no tag.
|
||||
# Tip: To always display the current Git commit, delete the next line.
|
||||
[[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line
|
||||
res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}"
|
||||
|
||||
# Show tracking branch name if it differs from local branch.
|
||||
if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
|
||||
res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}"
|
||||
fi
|
||||
|
||||
typeset -g my_git_format=$res
|
||||
}
|
||||
|
||||
functions -M my_git_formatter 2>/dev/null
|
||||
|
||||
# Don't count the number of unstaged, untracked and conflicted files in Git repositories with
|
||||
# more than this many files in the index. Negative value means infinity.
|
||||
#
|
||||
# If you are working in Git repositories with tens of millions of files and seeing performance
|
||||
# sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output
|
||||
# of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's
|
||||
# config: `git config bash.showDirtyState false`.
|
||||
typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1
|
||||
|
||||
# Don't show Git status in prompt for repositories whose workdir matches this pattern.
|
||||
# For example, if set to '~', the Git repository at $HOME/.git will be ignored.
|
||||
# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
|
||||
typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'
|
||||
|
||||
# Disable the default Git status formatting.
|
||||
typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
|
||||
|
||||
# Install our own Git status formatter.
|
||||
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'
|
||||
typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}'
|
||||
|
||||
# Enable counters for staged, unstaged, etc.
|
||||
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
|
||||
|
||||
# Icon color.
|
||||
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=007
|
||||
typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=008
|
||||
|
||||
# Show status of repositories of these types. You can add svn and/or hg if you are
|
||||
# using them. If you do, your prompt may become slow even when your current directory
|
||||
# isn't in an svn or hg reposotiry.
|
||||
typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
|
||||
|
||||
# These settings are used for repositories other than Git or when gitstatusd fails and
|
||||
# Powerlevel10k has to fall back to using vcs_info.
|
||||
typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=002
|
||||
typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=004
|
||||
typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=003
|
||||
|
||||
##########################[ end git configuration ]###########################
|
||||
|
||||
# Don't wait for Git status even for a millisecond, so that prompt always updates
|
||||
# asynchronously when Git state changes.
|
||||
typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0
|
||||
|
||||
# Cyan ahead/behind arrows.
|
||||
typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=cyan
|
||||
|
||||
# Don't show remote branch, current tag or stashes.
|
||||
# typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind)
|
||||
|
||||
# When in detached HEAD state, show @commit where branch normally goes.
|
||||
typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
|
||||
|
||||
# Don't show staged, unstaged, untracked indicators.
|
||||
# typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=$'\b'
|
||||
|
||||
# Show '*' when there are staged, unstaged or untracked files.
|
||||
typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*'
|
||||
|
||||
# Show '⇣' if local branch is behind remote.
|
||||
typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON='⇣'
|
||||
|
||||
# Show '⇡' if local branch is ahead of remote.
|
||||
typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON='⇡'
|
||||
|
||||
# Don't show the number of commits next to the ahead/behind arrows.
|
||||
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
|
||||
|
||||
# Remove space between '⇣' and '⇡'.
|
||||
# typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${P9K_CONTENT/⇣* ⇡/⇣⇡}'
|
||||
|
||||
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
|
||||
# when accepting a command line. Supported values:
|
||||
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off
|
||||
|
||||
# Instant prompt mode.
|
||||
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
|
||||
|
||||
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
|
||||
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
|
||||
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
|
||||
# really need it.
|
||||
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
|
||||
|
||||
# If p10k is already loaded, reload configuration.
|
||||
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
|
||||
(( ! $+functions[p10k] )) || p10k reload
|
||||
}
|
||||
|
||||
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
|
||||
'builtin' 'unset' 'p10k_config_opts'
|
@ -1,8 +1,5 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
emacsOverlaySha256 = "06413w510jmld20i4lik9b36cfafm501864yq8k4vxl5r4hn0j0h";
|
||||
in
|
||||
{
|
||||
|
||||
nixpkgs = {
|
||||
@ -19,11 +16,6 @@ in
|
||||
map (n: import (path + ("/" + n)))
|
||||
(filter (n: match ".*\\.nix" n != null ||
|
||||
pathExists (path + ("/" + n + "/default.nix")))
|
||||
(attrNames (readDir path)))
|
||||
|
||||
++ [(import (builtins.fetchTarball {
|
||||
url = "https://github.com/dustinlyons/emacs-overlay/archive/refs/heads/master.tar.gz";
|
||||
sha256 = emacsOverlaySha256;
|
||||
}))];
|
||||
(attrNames (readDir path)));
|
||||
};
|
||||
}
|
||||
|
@ -1,8 +1,4 @@
|
||||
{ pkgs, config, ... }:
|
||||
|
||||
{
|
||||
# Initializes Emacs with org-mode so we can tangle the main config
|
||||
".emacs.d/init.el" = {
|
||||
text = builtins.readFile ../shared/config/emacs/init.el;
|
||||
};
|
||||
}
|
||||
|
@ -4,352 +4,61 @@ let name = "Jip J. Dekker";
|
||||
user = "dekker1";
|
||||
email = "jip@dekker.one"; in
|
||||
{
|
||||
# Shared shell configuration
|
||||
zsh.enable = true;
|
||||
zsh.autocd = false;
|
||||
zsh.plugins = [
|
||||
{
|
||||
name = "powerlevel10k";
|
||||
src = pkgs.zsh-powerlevel10k;
|
||||
file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";
|
||||
}
|
||||
{
|
||||
name = "powerlevel10k-config";
|
||||
src = lib.cleanSource ./config;
|
||||
file = "p10k.zsh";
|
||||
}
|
||||
];
|
||||
zsh.initExtraFirst = ''
|
||||
if [[ -f /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ]]; then
|
||||
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
|
||||
. /nix/var/nix/profiles/default/etc/profile.d/nix.sh
|
||||
fi
|
||||
|
||||
# Define variables for directories
|
||||
export PATH=$HOME/.pnpm-packages/bin:$HOME/.pnpm-packages:$PATH
|
||||
export PATH=$HOME/.npm-packages/bin:$HOME/bin:$PATH
|
||||
export PATH=$HOME/.local/share/bin:$PATH
|
||||
export PNPM_HOME=~/.pnpm-packages
|
||||
|
||||
# Remove history data we don't want to see
|
||||
export HISTIGNORE="pwd:ls:cd"
|
||||
|
||||
# Emacs is my editor
|
||||
export ALTERNATE_EDITOR=""
|
||||
export EDITOR="emacsclient -t"
|
||||
export VISUAL="emacsclient -c -a emacs"
|
||||
|
||||
e() {
|
||||
emacsclient -t "$@"
|
||||
}
|
||||
|
||||
# nix shortcuts
|
||||
shell() {
|
||||
nix-shell '<nixpkgs>' -A "$1"
|
||||
}
|
||||
|
||||
# Use difftastic, syntax-aware diffing
|
||||
alias diff=difft
|
||||
|
||||
# Always color ls and group directories
|
||||
alias ls='ls --color=auto'
|
||||
'';
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
ignores = [ "*.swp" ];
|
||||
aliases = {
|
||||
co = "checkout";
|
||||
l = "log --graph --decorate --pretty=oneline --abbrev-commit";
|
||||
prune = "fetch --prune";
|
||||
stash-all = "stash save --include-untracked";
|
||||
s = "status";
|
||||
};
|
||||
ignores = [
|
||||
".DS_Store"
|
||||
".svn"
|
||||
"*~"
|
||||
"*.swp"
|
||||
"*.rbc"
|
||||
".idea/"
|
||||
"__pycache__/"
|
||||
".vscode"
|
||||
".clangd/"
|
||||
"compile_commands.json"
|
||||
"*.sublime-project"
|
||||
"*.sublime-workspace"
|
||||
"build.nosync/"
|
||||
];
|
||||
userName = name;
|
||||
userEmail = email;
|
||||
lfs = {
|
||||
enable = true;
|
||||
};
|
||||
lfs.enable = true;
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
core = {
|
||||
editor = "vim";
|
||||
autocrlf = "input";
|
||||
};
|
||||
pull.rebase = true;
|
||||
init.defaultBranch = "develop";
|
||||
pull.ff = true;
|
||||
push.default = "simple";
|
||||
rebase.autoStash = true;
|
||||
|
||||
credential.helper = "osxkeychain";
|
||||
|
||||
commit.gpgsign = true;
|
||||
gpg.format = "ssh";
|
||||
user.signingkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMCC0liW47USr/Ic1rJ52V4eE07y42VG9Ols1zYBrPlc";
|
||||
gpg.ssh.program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign";
|
||||
};
|
||||
};
|
||||
|
||||
vim = {
|
||||
# Shared shell configuration
|
||||
nushell = {
|
||||
enable = true;
|
||||
plugins = with pkgs.vimPlugins; [ vim-airline vim-airline-themes vim-startify vim-tmux-navigator ];
|
||||
settings = { ignorecase = true; };
|
||||
extraConfig = ''
|
||||
"" General
|
||||
set number
|
||||
set history=1000
|
||||
set nocompatible
|
||||
set modelines=0
|
||||
set encoding=utf-8
|
||||
set scrolloff=3
|
||||
set showmode
|
||||
set showcmd
|
||||
set hidden
|
||||
set wildmenu
|
||||
set wildmode=list:longest
|
||||
set cursorline
|
||||
set ttyfast
|
||||
set nowrap
|
||||
set ruler
|
||||
set backspace=indent,eol,start
|
||||
set laststatus=2
|
||||
set clipboard=autoselect
|
||||
|
||||
" Dir stuff
|
||||
set nobackup
|
||||
set nowritebackup
|
||||
set noswapfile
|
||||
set backupdir=~/.config/vim/backups
|
||||
set directory=~/.config/vim/swap
|
||||
|
||||
" Relative line numbers for easy movement
|
||||
set relativenumber
|
||||
set rnu
|
||||
|
||||
"" Whitespace rules
|
||||
set tabstop=8
|
||||
set shiftwidth=2
|
||||
set softtabstop=2
|
||||
set expandtab
|
||||
|
||||
"" Searching
|
||||
set incsearch
|
||||
set gdefault
|
||||
|
||||
"" Statusbar
|
||||
set nocompatible " Disable vi-compatibility
|
||||
set laststatus=2 " Always show the statusline
|
||||
let g:airline_theme='bubblegum'
|
||||
let g:airline_powerline_fonts = 1
|
||||
|
||||
"" Local keys and such
|
||||
let mapleader=","
|
||||
let maplocalleader=" "
|
||||
|
||||
"" Change cursor on mode
|
||||
:autocmd InsertEnter * set cul
|
||||
:autocmd InsertLeave * set nocul
|
||||
|
||||
"" File-type highlighting and configuration
|
||||
syntax on
|
||||
filetype on
|
||||
filetype plugin on
|
||||
filetype indent on
|
||||
|
||||
"" Paste from clipboard
|
||||
nnoremap <Leader>, "+gP
|
||||
|
||||
"" Copy from clipboard
|
||||
xnoremap <Leader>. "+y
|
||||
|
||||
"" Move cursor by display lines when wrapping
|
||||
nnoremap j gj
|
||||
nnoremap k gk
|
||||
|
||||
"" Map leader-q to quit out of window
|
||||
nnoremap <leader>q :q<cr>
|
||||
|
||||
"" Move around split
|
||||
nnoremap <C-h> <C-w>h
|
||||
nnoremap <C-j> <C-w>j
|
||||
nnoremap <C-k> <C-w>k
|
||||
nnoremap <C-l> <C-w>l
|
||||
|
||||
"" Easier to yank entire line
|
||||
nnoremap Y y$
|
||||
|
||||
"" Move buffers
|
||||
nnoremap <tab> :bnext<cr>
|
||||
nnoremap <S-tab> :bprev<cr>
|
||||
|
||||
"" Like a boss, sudo AFTER opening the file to write
|
||||
cmap w!! w !sudo tee % >/dev/null
|
||||
|
||||
let g:startify_lists = [
|
||||
\ { 'type': 'dir', 'header': [' Current Directory '. getcwd()] },
|
||||
\ { 'type': 'sessions', 'header': [' Sessions'] },
|
||||
\ { 'type': 'bookmarks', 'header': [' Bookmarks'] }
|
||||
\ ]
|
||||
|
||||
let g:startify_bookmarks = [
|
||||
\ '~/.local/share/src',
|
||||
\ ]
|
||||
|
||||
let g:airline_theme='bubblegum'
|
||||
let g:airline_powerline_fonts = 1
|
||||
'';
|
||||
};
|
||||
|
||||
alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
cursor = {
|
||||
style = "Block";
|
||||
};
|
||||
|
||||
window = {
|
||||
opacity = 1.0;
|
||||
padding = {
|
||||
x = 24;
|
||||
y = 24;
|
||||
};
|
||||
};
|
||||
|
||||
font = {
|
||||
normal = {
|
||||
family = "MesloLGS NF";
|
||||
style = "Regular";
|
||||
};
|
||||
size = lib.mkMerge [
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isLinux 10)
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isDarwin 14)
|
||||
];
|
||||
};
|
||||
|
||||
dynamic_padding = true;
|
||||
decorations = "full";
|
||||
title = "Terminal";
|
||||
class = {
|
||||
instance = "Alacritty";
|
||||
general = "Alacritty";
|
||||
};
|
||||
|
||||
colors = {
|
||||
primary = {
|
||||
background = "0x1f2528";
|
||||
foreground = "0xc0c5ce";
|
||||
};
|
||||
|
||||
normal = {
|
||||
black = "0x1f2528";
|
||||
red = "0xec5f67";
|
||||
green = "0x99c794";
|
||||
yellow = "0xfac863";
|
||||
blue = "0x6699cc";
|
||||
magenta = "0xc594c5";
|
||||
cyan = "0x5fb3b3";
|
||||
white = "0xc0c5ce";
|
||||
};
|
||||
|
||||
bright = {
|
||||
black = "0x65737e";
|
||||
red = "0xec5f67";
|
||||
green = "0x99c794";
|
||||
yellow = "0xfac863";
|
||||
blue = "0x6699cc";
|
||||
magenta = "0xc594c5";
|
||||
cyan = "0x5fb3b3";
|
||||
white = "0xd8dee9";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ssh = {
|
||||
starship = {
|
||||
enable = true;
|
||||
|
||||
extraConfig = lib.mkMerge [
|
||||
''
|
||||
Host github.com
|
||||
Hostname github.com
|
||||
IdentitiesOnly yes
|
||||
''
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isLinux
|
||||
''
|
||||
IdentityFile /home/${user}/.ssh/id_github
|
||||
'')
|
||||
(lib.mkIf pkgs.stdenv.hostPlatform.isDarwin
|
||||
''
|
||||
IdentityFile /Users/${user}/.ssh/id_github
|
||||
'')
|
||||
];
|
||||
enableNushellIntegration = true;
|
||||
};
|
||||
|
||||
tmux = {
|
||||
zoxide = {
|
||||
enable = true;
|
||||
plugins = with pkgs.tmuxPlugins; [
|
||||
vim-tmux-navigator
|
||||
sensible
|
||||
yank
|
||||
prefix-highlight
|
||||
{
|
||||
plugin = power-theme;
|
||||
extraConfig = ''
|
||||
set -g @tmux_power_theme 'gold'
|
||||
'';
|
||||
}
|
||||
{
|
||||
plugin = resurrect; # Used by tmux-continuum
|
||||
|
||||
# Use XDG data directory
|
||||
# https://github.com/tmux-plugins/tmux-resurrect/issues/348
|
||||
extraConfig = ''
|
||||
set -g @resurrect-dir '$HOME/.cache/tmux/resurrect'
|
||||
set -g @resurrect-capture-pane-contents 'on'
|
||||
set -g @resurrect-pane-contents-area 'visible'
|
||||
'';
|
||||
}
|
||||
{
|
||||
plugin = continuum;
|
||||
extraConfig = ''
|
||||
set -g @continuum-restore 'on'
|
||||
set -g @continuum-save-interval '5' # minutes
|
||||
'';
|
||||
}
|
||||
];
|
||||
terminal = "screen-256color";
|
||||
prefix = "C-x";
|
||||
escapeTime = 10;
|
||||
historyLimit = 50000;
|
||||
extraConfig = ''
|
||||
# Remove Vim mode delays
|
||||
set -g focus-events on
|
||||
|
||||
# Enable full mouse support
|
||||
set -g mouse on
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Key bindings
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# Unbind default keys
|
||||
unbind C-b
|
||||
unbind '"'
|
||||
unbind %
|
||||
|
||||
# Split panes, vertical or horizontal
|
||||
bind-key x split-window -v
|
||||
bind-key v split-window -h
|
||||
|
||||
# Move around panes with vim-like bindings (h,j,k,l)
|
||||
bind-key -n M-k select-pane -U
|
||||
bind-key -n M-h select-pane -L
|
||||
bind-key -n M-j select-pane -D
|
||||
bind-key -n M-l select-pane -R
|
||||
|
||||
# Smart pane switching with awareness of Vim splits.
|
||||
# This is copy paste from https://github.com/christoomey/vim-tmux-navigator
|
||||
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
|
||||
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
|
||||
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
|
||||
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
|
||||
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
|
||||
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
|
||||
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
|
||||
if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
|
||||
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'"
|
||||
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
|
||||
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'"
|
||||
|
||||
bind-key -T copy-mode-vi 'C-h' select-pane -L
|
||||
bind-key -T copy-mode-vi 'C-j' select-pane -D
|
||||
bind-key -T copy-mode-vi 'C-k' select-pane -U
|
||||
bind-key -T copy-mode-vi 'C-l' select-pane -R
|
||||
bind-key -T copy-mode-vi 'C-\' select-pane -l
|
||||
'';
|
||||
};
|
||||
enableNushellIntegration = true;
|
||||
};
|
||||
}
|
||||
|
@ -2,74 +2,44 @@
|
||||
|
||||
with pkgs; [
|
||||
# General packages for development and system management
|
||||
act
|
||||
alacritty
|
||||
aspell
|
||||
aspellDicts.en
|
||||
bash-completion
|
||||
bat
|
||||
btop
|
||||
coreutils
|
||||
killall
|
||||
neofetch
|
||||
openssh
|
||||
hut
|
||||
ltex-ls
|
||||
mas
|
||||
mdbook
|
||||
pandoc
|
||||
sqlite
|
||||
wget
|
||||
zip
|
||||
sapling
|
||||
tectonic
|
||||
texlab
|
||||
typst
|
||||
|
||||
# Encryption and security tools
|
||||
age
|
||||
age-plugin-yubikey
|
||||
gnupg
|
||||
libfido2
|
||||
pinentry
|
||||
yubikey-manager
|
||||
|
||||
# Cloud-related tools and SDKs
|
||||
#
|
||||
# docker marked broken as of Nov 15, 2023
|
||||
# https://github.com/NixOS/nixpkgs/issues/267685
|
||||
#
|
||||
# docker
|
||||
# docker-compose
|
||||
#
|
||||
awscli2
|
||||
flyctl
|
||||
ngrok
|
||||
tflint
|
||||
# Text and terminal utilities
|
||||
bat
|
||||
eza
|
||||
neovim
|
||||
zoxide
|
||||
|
||||
# Media-related packages
|
||||
emacs-all-the-icons-fonts
|
||||
dejavu_fonts
|
||||
ffmpeg
|
||||
fd
|
||||
font-awesome
|
||||
hack-font
|
||||
noto-fonts
|
||||
noto-fonts-emoji
|
||||
meslo-lgs-nf
|
||||
# C(++) development tools
|
||||
bison
|
||||
ccache
|
||||
cmake
|
||||
flex
|
||||
llvm
|
||||
ninja
|
||||
|
||||
# Python development tools
|
||||
pipx
|
||||
black
|
||||
poetry
|
||||
|
||||
# MiniZinc solvers
|
||||
gecode
|
||||
# or-tools
|
||||
|
||||
# Node.js development tools
|
||||
nodePackages.nodemon
|
||||
nodePackages.prettier
|
||||
nodePackages.npm # globally install npm
|
||||
nodejs
|
||||
|
||||
# Text and terminal utilities
|
||||
htop
|
||||
hunspell
|
||||
iftop
|
||||
jetbrains-mono
|
||||
jq
|
||||
ripgrep
|
||||
tree
|
||||
tmux
|
||||
unrar
|
||||
unzip
|
||||
zsh-powerlevel10k
|
||||
|
||||
# Python packages
|
||||
python39
|
||||
python39Packages.virtualenv # globally install virtualenv
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user