Minimal Setup

Smallest useful setup for beginners.

declarch.kdl

imports {
    "modules/base.kdl"
}

modules/base.kdl

pkg {
    aur {
        neovim
        git
    }
}

Apply

declarch --dry-run sync
declarch sync

Why this is a good start

  • only one module
  • easy to read
  • easy to expand later

Desktop Example

Simple desktop-oriented module layout.

Suggested structure

modules/
├── base.kdl
├── desktop.kdl
└── apps.kdl

modules/base.kdl

pkg {
    aur {
        neovim
        bat
        fzf
        ripgrep
    }

    pacman {
        git
        curl
        wget
    }
}

modules/desktop.kdl

pkg {
    aur {
        hyprland
        waybar
        rofi-wayland
    }

    pacman {
        foot
        mako
        grim
        slurp
    }
}

modules/apps.kdl

pkg {
    pacman {
        firefox
        thunderbird
    }

    flatpak {
        com.spotify.Client
        org.telegram.desktop
    }
}

declarch.kdl

imports {
    "modules/base.kdl"
    "modules/desktop.kdl"
    "modules/apps.kdl"
}

Apply safely

declarch --dry-run sync
declarch sync

Development Example

Beginner-friendly dev setup with separate modules.

Prerequisite

declarch init --backend npm

Structure

modules/
├── base.kdl
├── dev.kdl
└── langs.kdl

modules/dev.kdl

pkg {
    aur {
        neovim
        tmux
        docker
    }

    pacman {
        git
        github-cli
        jq
    }
}

modules/langs.kdl

pkg {
    aur {
        rustup
    }

    npm {
        typescript
        ts-node
        prettier
        eslint
    }
}

declarch.kdl

imports {
    "modules/base.kdl"
    "modules/dev.kdl"
    "modules/langs.kdl"
}

Apply

declarch --dry-run sync
declarch sync

Modular Example

Organize by purpose, not by backend.

Example structure

modules/
├── core.kdl
├── work.kdl
├── gaming.kdl
└── media.kdl

core.kdl

pkg {
    aur {
        neovim
        bat
        fzf
    }

    pacman {
        git
        curl
    }

    flatpak {
        org.mozilla.firefox
    }
}

work.kdl

pkg {
    pacman {
        slack-desktop
        zoom
    }

    flatpak {
        com.microsoft.Teams
    }
}

Select imports per machine

// work laptop
imports {
    "modules/core.kdl"
    "modules/work.kdl"
}
// gaming pc
imports {
    "modules/core.kdl"
    "modules/gaming.kdl"
    "modules/media.kdl"
}

Why this pattern works

  • cleaner diffs
  • easier reuse
  • machine-specific setups stay simple